我是靠谱客的博主 朴素画笔,这篇文章主要介绍FreeRTOS(一):裸机系统与多任务系统3.1裸机系统3.2多任务系统总结,现在分享给大家,希望可以做个参考。

裸机系统与多任务系统

  • 3.1裸机系统
    • 3.1.1轮询系统
    • 3.1.2前后台系统
  • 3.2多任务系统
  • 总结

3.1裸机系统

裸机:英文名是Bare machine, Bare metal,指没有配置操作系统和其他软件的电子计算机。
裸机系统通常分成轮询系统和前后台系统。

3.1.1轮询系统

轮询系统即是在裸机编程的时候(例如:51的main函数),先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情.结构简单,只适用于顺序执行代码不需要外部事件驱动的情况。当有外部事件驱动时,实时性就会降低。
(例如:按下按键时(事件3),程序需要立刻响应。如果这个时候当前事件(事件1)还没有完成,一直到按键释放事件1还没有完成,按键的事件3就没有执行,当事件1完成会执行事件2。)
(示例):

复制代码
1
2
3
4
5
6
7
8
9
10
int main(void) { HardWareInit(); for(;;){ DoSomething1();//事件1 DoSomething2();//事件2 DoSomething3();//事件3 } }

3.1.2前后台系统

相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里称为前台(外部事件响应,处理简短事件), main 函数里面的无限循环称为后台(轮询系统执行,处理复杂时间)。
代码如下(示例):

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int flag1 = 0; int flag2 = 0; int main(void) { HareWareInit(); for(;;){ if(flag1){ DoSomething1(); } if(flag2){ DoSomething2(); } } } void ISR1(void) { flag1 = 1; DoSomething1(); } void ISR2(void) { flag2 = 1; DoSomething2(); }

3.2多任务系统

相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。
中断:事件的响应
任务(也存在优先级):事件的处理
任务是把程序主体分割成的独立的、无限循环且不能返回的小程序,由操作系统进行调度。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int flag1 = 0; int flag2 = 0; int main(void) { HardWareInit(); RTOSInit(); RTOSStart(); } void ISR1(void) { flag1 = 1; } void ISR2(void) { flag2 = 1; } void DoSomething1(void) { for(;;){ if(flag1){ } } } void DoSomething2(void) { for(;;){ if(flag2){ } } }

总结

模型事件响应事件处理特点
轮询系统主程序主程序轮询响应事件,轮询处理事件
前后台系统中断主程序实时响应事件,轮询处理事件
多任务系统中断任务实时响应事件,实时处理事件

最后

以上就是朴素画笔最近收集整理的关于FreeRTOS(一):裸机系统与多任务系统3.1裸机系统3.2多任务系统总结的全部内容,更多相关FreeRTOS(一):裸机系统与多任务系统3内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部