FreeRTOS系列补充1:重点记忆知识点

news2024/11/26 20:47:41

1、FreeRTOS的调度策略、内部原理

FreeRTOS采用抢占式优先级调度策略。任务根据其优先级进行调度,优先级高的任务会抢占优先级低的任务的执行权。FreeRTOS使用任务控制块(Task Control Block,简称TCB)来管理任务信息和状态。调度器根据任务的优先级和状态进行任务切换。

2、FreeRTOS中的常用任务间通信手段: FreeRTOS提供了几种任务间通信的机制,常用的有:

队列:任务可以通过队列发送和接收数据。

信号量:用于任务之间的同步和互斥,保证资源的互斥访问。

事件标志组:允许任务等待多个事件的发生。

互斥量:用于任务之间对共享资源的互斥访问。

3、优先级翻转背后逻辑以及解决方法:

优先级翻转是指高优先级任务由于等待低优先级任务释放共享资源而被阻塞的情况。解决方法通常有以下几种:

使用优先级继承:当一个低优先级任务获得了高优先级任务所需的资源时,低优先级任务将提升为与高优先级任务相同的优先级,直到释放该资源。

使用优先级屏蔽:在高优先级任务访问共享资源时,屏蔽掉低优先级的任务调度,保证高优先级任务能够快速执行。

4、信号量和互斥量的区别、使用场景:

信号量(Semaphore)用于任务之间的同步和互斥,可以用来保护共享资源控制任务执行顺序。信号量可以是计数型的,允许多个任务同时持有。

互斥量(Mutex)是一种特殊的信号量,只允许一个任务持有,用于实现对共享资源的互斥访问。

使用场景:信号量适用于多个任务之间的资源同步和共享;互斥量适用于防止多个任务同时访问共享资源时发生冲突。

5、信号量和互斥量背后的原理:

信号量和互斥量都是基于原子操作实现的。原子操作是指不会被中断的操作,可以保证操作的完整性。

信号量通过计数器实现,当任务请求获取信号量时,计数器减一;释放信号量时,计数器加一。如果计数器为零,表示没有可用的信号量,任务会被阻塞。

互斥量通过使用标志位来表示资源是否被锁定。当一个任务请求获取互斥量时,如果资源已经被锁定,任务会被阻塞,直到资源被释放。

6、平时工作中任务优先级如何划分?

任务优先级的划分应该根据任务的紧急性和重要性进行评估。一般来说,具有紧急性和对系统正常运行有较大影响的任务应设置较高的优先级,而相对次要的任务则可以设置较低的优先级。

任务优先级的划分需要综合考虑系统的实际需求任务之间的依赖关系以及资源的使用情况等因素。

7、FreeRTOS内存管理的策略:

FreeRTOS采用动态内存管理的策略,可以通过配置选项选择不同的内存管理算法。常用的内存管理算法有堆式算法静态分配算法

堆式算法使用动态存储分配函数(如malloc和free)来管理任务的堆栈和其他内存需求。这种算法灵活性较高,但可能存在内存碎片的问题。

静态分配算法在编译时为任务分配固定大小的内存空间,不涉及动态内存分配。这种算法简单高效,但需要在编译时确定任务的最大堆栈需求。

FreeRTOS提供了5种动态内存管理算法,分别为: heap_1、heap_2、heap_3、heap_4、heap_5 。

8、中断中能否使用互斥量:

一般情况下,中断服务程序中不应该使用阻塞型的同步机制,如互斥量。因为中断服务程序需要尽可能地快速执行完毕,以避免影响系统的实时性。在中断中使用互斥量可能导致任务被阻塞,无法及时响应其他中断。如果确实需要在中断中进行资源的互斥访问,可以考虑使用轻量级的同步机制,如关中断或原子操作来保护共享资源。

9、说一下实时操作系统是怎么进行任务调度的。

实时操作系统系统rtos发生任务调度的场合主要有两种,一种是调用系统api函数,还有一种是在滴答定时器中断内将就绪列表中优先级最高的任务和正在运行的任务优先级进行比较

如果就绪列表中优先级最高的任务优先级要比正在运行的任务优先级要高那么就执行抢占式调度,也就是高优先级的任务会打断低优先级任务的执行,然后开始运行。如果就绪列表中任务优先级最高的任务和正在运行的任务优先级相同,那么就执行时间片轮询调度

在要进行任务上下文切换的时候,系统会对中断和状态寄存器的bit28位写1来触发pensv异常。当操作系统检测到此时某个中断服务函数正在执行的话,pensv异常会自动延迟上下文切换的请求,等待其他中断服务函数都完成才会放行。这时候就可以暂停正在执行的任务,把cpu寄存器的值保存在这个任务的任务堆栈中,然后把将要执行的任务寄存器值从任务堆栈中恢复到cpu寄存器值中。也就是对被切换的任务保存现场,对切换的任务恢复任务。这就完成了一次任务调度。

10、中断执行机制

中断执行机制,可以简单概括为三步。

1、中断请求:外设产生中断请求(GPIO外部中断、定时器中断等)

2、响应中断:CPU停止执行当前程序,转而去执行中断处理程序(ISR

3、退出中断:执行完毕,返回被打断的程序处,继续往下执行

中断优先级数值越小越优先,任务优先级数值越大越优先。能打断当前程序进行的有两个,一个是任务调度,一个是中断。

11、任务切换

任务切换的本质:就是CPU寄存器的切换。

假设当由任务A切换到任务B时,主要分为两步:

第一步:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场

第二步:将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场

对任务A保存现场,对任务B恢复现场,这个整体的过程称之为:上下文切换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1561066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好展位、抢先订!2024第19届亚洲泳池SPA展览会|广州游池展

邀请函/2024第19届亚洲泳池SPA博览会 时间:2024年5月10日--12日 地点:广州中国进出口商品交易会展馆 主办单位:广东省沐浴休闲协会 广东省水处理技术协会 广东鸿威国际会展集团有限公司 支持单位:国际桑拿协会 韩国SPA协会 亚洲水疗康体促…

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算 数据的计算需要采用格式化的存储, 规则的数据结果,可以快速的按照指定要求存储数据 这里就不得不说二叉树了,二叉树应用场景真的很多 本题讲的是,验证二叉树的前序序列化 换言之,不采用建立树的…

monocle2 orderCells报错

问题:运行monocle2(version2.26.0)的orderCells出现以下错误 解决方式:出现错误后,运行以下命令: trace(project2MST, edit T, where asNamespace("monocle")) 然后,在弹出的窗口…

Meta Pixel:助你实现高效地Facebook广告追踪

Meta Pixel 像素代码是用來衡量Facebook广告效果的一个官方数据工具,只要商家有在Facebook上投放广告就需要串联Meta Pixel 像素代码来查看相关数据。 它本质上是一段 JavaScript 代码,安装后可以让用户在自己网站上查看到访客活动。它的工作原理是加载…

如何在CentOS7部署Wiki.js知识库并实现分享好友公网远程使用【内网穿透】

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

小黑逆向爬虫探索与成长之路:小黑独立破解毛毛租数据加密与解密

前言 有道和招标网的加密入口定位在前面两期做了详细的介绍,本小结将通过简单的关键词搜索定位到加密与解密入口 数据接口寻找与请求 根据响应数据长度,确定数据接口,发现传入的参数需要加密,响应的结果需要解密,后…

Python异常处理:基础到进阶的实用指南

前言 大家好,我是海鸽。异常处理在工程文件中必不可少,今天就带大家彻底搞定python的异常处理。 什么是异常 在Python中,异常是指在程序执行过程中出现的错误或异常情况。 当Python解释器无法执行代码时,它会引发异常&#xff0…

Excel 粘贴回筛选后的单元格不能完全粘老是少数据 ,有些单元格还是空的

环境: excel2021 Win10专业版 问题描述: excel 粘贴回筛选后的单元格不能完全粘老是少数据 有些单元格还是空的 复制选择筛选后A1-A10单元格 ,定位条件)(仅可见单元格)来访问,或者你可以使用…

算法沉淀 —— 深度搜索(dfs)

算法沉淀 —— 深度搜索(dfs) 一、计算布尔二叉树的值二、求根节点到叶节点数字之和三、二叉树剪枝四、验证二叉搜索树五、二叉搜索树中第K小的元素 一、计算布尔二叉树的值 【题目链接】:2331. 计算布尔二叉树的值 【题目】: …

MambaMixer、NeSLAM、Talk3D、BundledSLAM、ShapeFusion

本文首发于公众号:机器感知 MambaMixer、NeSLAM、Talk3D、BundledSLAM、ShapeFusion ShapeFusion: A 3D diffusion model for localized shape editing In the realm of 3D computer vision, parametric models have emerged as a ground-breaking methodology fo…

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码 手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流…

Qt实现通过.css样式文件实时加载QSS样式

初学Qt时要想通过QSS修改控件QWidget,QPushButton等原生基础控件的样式,一般都是直接在.ui文件中直接添加qss,或者在代码中通过setStyleSheet(QString qss)来设置。当程序很大时,很多地方需要复用样式时会非常麻烦,qss…

C++教学——从入门到精通 6.ASCII码与字符型

如何把小写字母转换成大写字母呢? 这个问题问的好,首先我们要新学一个类型——char 这个类型就是字符型 再来说说ASCII码 给大家举几个例子 空格————32 0————48 9————57 A————65 Z————90 a————97 z————122 我们…

LeetCode-560. 和为 K 的子数组【数组 哈希表 前缀和】

LeetCode-560. 和为 K 的子数组【数组 哈希表 前缀和】 题目描述:解题思路一:一边算前缀和一边统计。这里用哈希表统计前缀和出现的次数,那么和为k的子数组的个数就是当前前缀和-k的个数,即preSums[presum - k]。画个图表述就是&a…

NGINX 反向代理 CORS

我遇到了一个问题就是 Nginx 是作为反向代理服务器部署的,但因为 Nginx 的配置导致 CORS 问题。 在这个时候我们可以对 Nginx 的配置文件进行修改: 在 location 后添加下面的内容: add_header Access-Control-Allow-Origin *; add_header A…

Kafka入门到实战-第二弹

Kafka入门到实战 Kafka快速开始官网地址Kafka概述Kafka术语Kafka初体验更新计划 Kafka快速开始 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流…

ES6学习之路:迭代器Iterator和生成器Generator

迭代器 一、知识背景 什么是迭代器 迭代器就是在一个数据集合中不断取出数据的过程迭代和遍历的区别 遍历是把所有数据都取出迭代器注重的是依次取出数据,它不会在意有多少数据,也不会保证能够取出多少或者能够把数据都取完。比如斐波那契额数列&#…

离散时间动态系统的集成自适应动态规划智能控制-北科大博毕

主要内容: 传统值迭代产生迭代控制策略,给出稳定性和吸引域判据;传统值迭代则迭代过程中得到可容许策略折扣因子对迭代控制策略可容许的影响,神经网络对未知系统建模,讨论模型网络权重更新情况下参数误差和系统状态估…

TikTok零播放?可能是海外代理IP的问题

在当今社交媒体的蓬勃发展中,TIKTOK作为一款备受欢迎的短视频平台,其直播功能也逐渐受到用户的青睐。然而,有时候跨境电商商家在进行直播时却面临着一个令人头疼的问题:没有观众。这时候,海外代理IP可能是一个潜在的原…

吴恩达:别光盯着GPT-5,用GPT-4做个智能体可能提前达到GPT-5的效果

最近,斯坦福大学教授吴恩达在演讲中提到,他们发现,基于 GPT-3.5 构建的智能体工作流在应用中表现比 GPT-4 要好。 AI 智能体是去年很火的一个话题,但是 AI 智能体到底有多大的潜力,很多人可能没有概念。 最近&#x…