《FreeRTOS内核实现与应用开发实战指南:基于STM32》 —3 裸机系统与多任务系统

举报
华章计算机 发表于 2019/12/07 11:43:26 2019/12/07
【摘要】 本节书摘来自华章计算机《FreeRTOS内核实现与应用开发实战指南:基于STM32》一书中第3章,第3.1.1节,作者是刘火良 杨 森。

第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 }


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。