浅谈: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-03 17:08
已编辑
西安电子科技大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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