《FreeRTOS内核实现与应用开发实战指南:基于STM32》 —3 裸机系统与多任务系统
第3章
裸机系统与多任务系统
在真正开始动手写FreeRTOS内核之前,我们先来讲解单片机编程中的裸机系统和多任务系统(不仅限于FreeRTOS)的区别。
3.1 裸机系统
裸机系统通常分成轮询系统和前后台系统,有关这两者的具体实现方式请参见下面的讲解。
3.1.1 轮询系统
轮询系统即在裸机编程时,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地处理各种事件,大概的伪代码具体参见代码清单3-1。轮询系统是一种非常简单的软件结构,通常只适用于仅需要顺序执行代码且不需要外部事件来驱动就能完成的事件。在代码清单3-1中,如果只是实现LED翻转、串口输出、液晶显示等操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,例如用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。假设DoSomething3是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立刻响应并做紧急处理,而这个时候程序刚好执行到DoSomething1,致命的是DoSomething1需要执行的时间比较久,久到按键释放之后还没有执行完毕,那么当执行到DoSomething3时就会丢失一次事件。由此可见轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。
代码清单3-1 轮询系统伪代码
1 int main(void)
2 {
3 /* 硬件相关初始化 */
4 HardWareInit();
5
6 /* 无限循环 */
7 for (;;) {
8 /* 处理事件1 */
9 DoSomething1();
10
11 /* 处理事件2 */
12 DoSomething2();
13
14 /* 处理事件3 */
15 DoSomething3();
16 }
17 }
- 点赞
- 收藏
- 关注作者
评论(0)