《FreeRTOS内核实现与应用开发实战指南:基于STM32》 —3.1.2 前后台系统

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

3.1.2 前后台系统

相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里称为前台,main()函数中的无限循环称为后台,大概的伪代码参见代码清单3-2。

代码清单3-2 前后台系统伪代码

 1 int flag1 = 0;

 2 int flag2 = 0;

 3 int flag3 = 0;

 4

 5 int main(void)

 6 {

 7     /* 硬件相关初始化 */

 8     HardWareInit();

 9

10     /* 无限循环 */

11     for (;;) {

12         if (flag1) {

13             /* 处理事件1 */

14             DoSomething1();

15         }

16

17         if (flag2) {

18             /* 处理事件2 */

19             DoSomething2();

20         }

21

22         if (flag3) {

23             /* 处理事件3 */

24             DoSomething3();

25         }

26     }

27 }

28

29 void ISR1(void)

30 {

31     /* 置位标志位 */

32     flag1 = 1;

33     /* 如果事件处理时间很短,则在中断里面处理

34     如果事件处理时间比较长,则回到后台处理 */

35     DoSomething1();

36 }

37

38 void ISR2(void)

39 {

40     /* 置位标志位 */

41     flag2 = 1;

42

43     /* 如果事件处理时间很短,则在中断里面处理

44     如果事件处理时间比较长,则回到后台处理 */

45     DoSomething2();

46 }

47

48 void ISR3(void)

49 {

50     /* 置位标志位 */

51     flag3 = 1;

52

53     /* 如果事件处理时间很短,则在中断里面处理

54     如果事件处理时间比较长,则回到后台处理 */

55     DoSomething3();

56 }

在顺序执行后台程序时,如果有中断,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序中标记事件。如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回后台程序处理。虽然事件的响应和处理分开了,但是事件的处理还是在后台顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大提高程序的实时响应能力。在大多数中小型项目中,前后台系统运用得好,堪称有操作系统的效果。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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