2022-04-22
依据:[野火]《FreeRTOS内核实现与应用开发实战指南》
目录
裸机系统
轮询系统
前后台系统
多任务系统
裸机系统
轮询系统和前后台系统
轮询系统
复制代码
1
2
3
4
5
6
7
8
9
10
11
12int main(void) { HardWareInit();//初始化 while(1) { DoSomething1(); DoSomething2(); DoSomething3(); } }
前后台系统
轮询系统+中断。中断称为前台
复制代码
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
34
35
36
37
38
39
40
41
42
43
44
45int flag1 = 0; int flag2 = 0; int flag3 = 0; int main(void) { HardWareInit();//初始化 while(1) { if(flag1) DoSomething1(); if(flag2) DoSomething2(); if(flag3) DoSomething3(); } } void ISR1(void) { /* 置位标志位 */ flag1 = 1; /* 如果事件处理时间很短,则在中断里面处理 如果事件处理时间比较长,在回到前台处理 */ DoSomething1(); } void ISR2(void) { /* 置位标志位 */ flag2 = 1; /* 如果事件处理时间很短,则在中断里面处理 如果事件处理时间比较长,在回到前台处理 */ DoSomething2(); } void ISR3(void) { /* 置位标志位 */ flag3 = 1; /* 如果事件处理时间很短,则在中断里面处理 如果事件处理时间比较长,在回到前台处理 */ DoSomething3(); }
多任务系统
伪代码:::
复制代码
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
34
35
36
37int flag1 = 0; int flag2 = 0; int flag3 = 0; int main(void) { HardWareInit();//初始化 RTOSInit();//OS初始化 RTOSStart();//OS启动,开启多任务回调,不再返回 } void ISR1(void) { /* 置位标志位 */ flag1 = 1; } void DoSomething1(void) { /* 无限循环,不能返回 */ while(1) { /* 任务实体 */ if (flag1) { } } } //多几个ISR和DoSomething
程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为任务。每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。
模型 | 事件响应 | 事件处理 | 特点 |
轮询系统 | 主程序 | 主程序 | 轮询响应事件,轮询处理事件 |
前后台系统 | 中断 | 主程序 | 实时响应事件,轮询处理事件 |
多任务系统 | 中断 | 任务 | 实时响应事件,实时处理事件 |
这么看来、其实调用STM32给的API很简单,不需要知道太多内核东西!!!
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
最后
以上就是健康早晨最近收集整理的关于FreeRTOS学习记录(二):裸机系统、多任务系统裸机系统多任务系统的全部内容,更多相关FreeRTOS学习记录(二)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复