FreeRTOS

freertos 会接管 systick,作用时间片基准,系统不跑systick不会开始计数, 所以需要另外的timer作为hal_tick来源。 
freertos 会接管 svc,作用是用来开跑第一个线程。
freertos 会接管 pendsv,作为线程切换的入口。
freertos 线程切换,实际是线程上下文入栈出栈过程,栈在堆里面创建。上下文就是执行流在某个时刻的一个快照。
freerots 是多线程微内核,没有进程概念,也不分内核态用户态,代码段,数据段,堆共享,每个线程栈保存各自结构体中,所以切换快,但安全性需要程序员自己把握。
HAL设计的时候是跑单执行流的,所以用多线程和中断回调时候注意里面的__HAL_LOCK有坑。
freertos tickless 是内核轮询每个线程等待时间,取最小值作为系统休眠时间,然后休眠,唤醒时计算真实休眠时间,加到tick里面。唤醒可能是时间到了,也可能是中断唤醒。
freertos 的中断回调api要注意中断优先级限制。
freertos 注意文档与代码版本,api有微调有坑。

你可能感兴趣的:(FreeRTOS)