STM32开发笔记(四)——FreeRTOS
小狼@http://blog.youkuaiyun.com/xiaolangyangyang
一、FreeRTOS调度原理
FreeRTOS调度分为时间片调度和抢占调度两种。
时间片调度:在tick(周期1ms)到来时会检查线程时间片是否用完以进行调度;
抢占式调度:1、在tick到来时,检查是否有处于就绪态的高优先级线程以完成调度;2、使用定时器中断实现了us级延时的线程,在定时器中断中进行调度;3、高优先级线程睡眠时进行调度切换到低优先级线程。
二、FreeRTOS原语
MUTEX(互斥锁):用于资源互斥,不能在中断中等待互斥锁;
SEMA(信号量):用于互斥时信号量最大值为1;用户线程同步时,信号量初始值自定义,初始值为1,同步线程发送信号量,被同步线程释放信号量;可在中断中发送信号量,但是不能在中断中等待信号量;
MsgQ(消息队列):用于线程同步及通信,与SEMA区别是在用于线程同步时,还可以携带消息用于通信;可在中断中发送消息,但是不能在中断中等待消息;
EVENT(事件标记):有时称为全局变量,用于线程间同步,线程等待标记满足条件,可在中断中设置事件标记,但不能在中断中等待事件标记。