基础1-什么是临界区
临界区是指那些必须完整运行,不能被打断的代码段,比如有的外设的初始化需要严格的时序,初始化过程中不能被打断、比如同步值的获取;
基础2-什么是函数可重入,什么是函数不可重入?
函数可重入是指可以被打断的函数;函数不可重入是指不可以被打断运行的函数;
函数重入可能出现的情况:
- 在运行中会被中断打断;
- 有优先级的任务切换;
- 递归调用
可重入的函数有哪些特征?
- 参数一般为指针或者为常数
- 不依靠全局变量
- 对时序没有严格要求
- 全使用局部变量
基础3-临界区工作方式
主流的RTOS基本上对临界区的设计有两种:
1. 屏蔽中断; 可以无视中断,对于任何不可重入函数都是非常友好,但容易错过中断。
2.不屏蔽中断,但是锁定调度器;会将调度器锁定,所以不会出现优先级任务的打断;不会错过中断,但是有可能会出现不可重入函数的打断,所以,需要配合信号量等方法对部分变量进行控制。
基础4-临界区到底该怎么用?什么时候用?
1.在所有不可重入的函数调用前进入临界区
2.在函数结束调用后退出临界区