浅谈:freeRTOS

1、内存管理

freeRTOS提供5种内存管理方式,heap_1-heap_5,通常采用heap_4,其特点是相邻空闲碎片可合并,且效率较高;

2、任务管理

任务调度依据优先级实现,处理器优先处理优先级高的任务,若优先级相同,采用分时处理原则,每个时间片通常为1Tick/1ms;

优先级取值范围为0~(configMAX_PRIORITIES – 1),其中configMAX_PRIORITIES在配置文件中设置,通常不超过32,

数值越高优先级越高,这一点恰好和中断相反,每个优先级都会维护一个优先级队列,以此来调度处理器;

3、任务同步

freeRTOS任务同步主要通过semaphore和mutex实现,其中mutex通过优先级继承可防止优先级反转;

任务通信主要通过队列实现,另外事件组也可用于任务同步与通信,configUSE_16_BIT_TICKS=1表示每个事件组包含16位,

其中高8位保留,通常用于系统时间戳,第8位可用于表示事件;configUSE_16_BIT_TICKS=0表示每个事件组包含32位,其余

不变;另外,事件组可同时保留多个,用于不同任务之间的隔离与维护方便;

4、中断管理

中断分为响应式和抢断式,通常4位,16个级别进行划分,划分由NVIC实现,通常只包含响应式中断足矣,数值越小优先级越高;

中断服务例程(ISR)需要尽可能简短,尽量做一些数据获取/转移、位操作之类的,具体的数据处理与响应交由具体任务实现即可;

注意ISR中不能调用xTaskDelay()这种可被阻塞的函数,因为ISR没有可用的上下文被阻塞起来,所以freeRTOS对这类函数通常设置了两套API,其中一套用于任务调用,另外一套在尾部加FromISR,如xQueueSendFromISR(),用于ISR,可防止ISR被阻塞;

任务可被阻塞的函数通常设计队列处理、信号量、事件组、任务通知、软件定时器等相关函数。

全部评论

相关推荐

10-10 20:19
已编辑
大连理工大学 后端工程师
真绷不住了,小红书给我约的下午2点的面试,我等了一小时面试官一直不上线,hr电话也打不通,别告诉我他们还在放假,3点还给我发了个面试满意度评价后续:交接的hr离职了,唯一的联系人没有了,还能重新约面吗不是真绷不住了,问hr说给不了继任的hr联系方式,不会直接给我挂了吧,还没面试呢更新:新hr来跟我对接了,重新约面绷不住了,又把我鸽了,临时有需求重新第三次约面面经一面不是,八股项目一点没问小红书一面1. 给你单链表的头指针 `head` 和两个整数 `left` 和 `right` ,其中 `left <= right` 。请你前后相邻的元素两两翻转,从位置 `left` 到位置 `right` 的链表节点,如果最后一个元素没有成对元素,则不翻转此元素,返回 **反转后的链表** 。下标从1开始数。输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,3,2,4,5]输入:head = [5], left = 1, right = 1输出:[5]输入:head = [1,2,3,4,5,6,7,8,9,10,11], left = 3, right = 8输出:[1, 2, 4, 3, 6, 5, 8, 7, 9, 10, 11]2. 写一个 http接口的Result 类,其中必须包含 code,msg, 以及泛型data成员,实现静态的success和error方法,能通过这两个方法将data和msg和code信息返回给前端,需要支持服务内返回订单,用户信息等所有接口。未说明的地方自行发挥就行。3. 力扣79单词搜索4. 请解释什么是JVM中的“非对齐压缩指针”5. vo的userId是int,dto的userId是Integervo.setUserId(dto.getUserId())  ,会有问题吗?6. 微信小程序给用户提供评论功能,用户可以发表最长三万字的评论,对于相同的用户ID,一小时内禁止提交相同的评论内容7. java反射有哪些常用的方法8. 如果让你实现lombok你会怎么实现9. linux怎么执行一个post方法10. 如果让你设计一个RPC框架怎么设计八股小子应声倒地不是为什么这么离谱,一点八股没有感觉要凉了
后端毁我一生:今天不是放假吗,怎么还约面试?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务