FreeRTOS实时操作系统学习小结
FreeRTOS:Real Time Operating System实时操作系统
通过任务调度实现多任务创建,达成处理多任务的操作,FreeRTOS主要使用抢占式的调度方式,指高优先级的任务可以比低优先级的任务优先执行,调度器先选择最高优先级的任务,其他任务会进入挂起态,直到调度器下一次选择该任务。还有一种时间片轮转的调度策略,对于同一优先级的任务,按照时间片进行调度。
比较-单片机裸机:一次只能处理一个任务。由于目前芯片在裸机时的处理频率大多处于资源浪费的情况,移植操作系统可充分利用资源。
任务状态:就绪态/运行态/阻塞态/挂起态
FreeRTOS任务间通信:信号量、事件组、消息队列
信号量
二值信号量:
信号量只有0和1两个值,可用于多任务间通信、任务延时以及防止多任务间同时访问共享资源等,可实现互斥锁功能。
默认初始信号量的值为1,通过PV(申请/释放)操作,实现以上功能。
计数信号量:
信号量的数值大于1的队列,任务确认队列是否为空,不为空即可用于事件计数和资源管理。
事件组
保存事件标志的组。创建事件组,在任务中调用借口等待事件的产生,通过设置和清楚事件标志位,多个任务间可以同步和通信。
消息队列
任务通过消息队列传递消息,每个消息都有单独的ID,一个任务向队列发送消息,另一个任务从队列中接收消息,可以实现任务间的消息交换。
软件定时器
创建软件定时器任务,设置回调函数用于软件定时器到时间后需要执行的动作,可以实现软件定时的功能,需要注意定时器优先级,如果优先级比正常任务低会导致定时器无法正常使用。