单片机系统——基于STM32

1,裸机系统之轮询系统

      轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情;轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情,实时性比较低。

轮询系统代码实例如下:

1 int main(void)
2 {
3 /* 硬件相关初始化 */
4 HardWareInit();
5
6 /* 无限循环 */
7 for (;;) {
8 /* 处理事情1 */
9 task1();
10
11 /* 处理事情2 */
12 task2();
13
14 /* 处理事情3 */
15 task3();
16 }
17 }

 

2,裸机系统之前后台系统

     前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main 函数里面的无限循环我们称为后台。

1 int flag1 = 0;
2 int flag2 = 0;
3 int flag3 = 0;
5 int main(void)
6 {
7 /* 硬件相关初始化 */
8 HardWareInit();
9
10 /* 无限循环 */
11 for (;;) {
12 if (flag1) {
13 /* 处理事情1 */
14 task1();
15 }
16
17 if (flag2) {
18 /* 处理事情2 */
19 task2();
20 }
21
22 if (flag3) {
23 /* 处理事情3 */
24 task3();
25 }
26 }
27 }
28
29 void ISR1(void)
30 {
31 /* 置位标志位 */
32 flag1 = 1;
33 /* 如果事件处理时间很短,则在中断里面处理
34 如果事件处理时间比较长,在回到前台处理 */
35 task1();
36 }
37
38 void ISR2(void)
39 {
40 /* 置位标志位 */
41 flag2 = 1;
42
43 /* 如果事件处理时间很短,则在中断里面处理
44 如果事件处理时间比较长,在回到前台处理 */
45 task2();
46 }
47
48 void ISR3(void)
49 {
50 /* 置位标志位 */
51 flag3 = 1;
52
53 /* 如果事件处理时间很短,则在中断里面处理
54 如果事件处理时间比较长,在回到前台处理 */
55 task3();
56 }

3,实时操作系统——多线程系统

        和前后台系统一样,多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性又被提高了。

1 int flag1 = 0;
2 int flag2 = 0;
3 int flag3 = 0;
4
5 int main(void)
6 {
7 /* 硬件相关初始化 */
8 HardWareInit();
9
10 /* OS 初始化 */
11 RTOSInit();
12
13 /* OS 启动,开始多线程调度,不再返回 */
14 RTOSStart();
15 }
16
17 void ISR1(void)
18 {
19 /* 置位标志位 */
20 flag1 = 1;
21 }
22
23 void ISR2(void)
24 {
25 /* 置位标志位 */
26 flag2 = 2;
27 }
28
29 void ISR3(void)
30 {
31 /* 置位标志位 */
32 flag3 = 1;
33 }
34
35 void task1(void)
36 {
37 /* 无限循环,不能返回 */
38 for (;;) {
39 /* 线程实体 */
40 if (flag1) {
41
42 }
43 }
44 }
45
46 void task2(void)
47 {
48 /* 无限循环,不能返回 */
49 for (;;) {
50 /* 线程实体 */
51 if (flag2) {
52
53 }
54 }
55 }
56
57 void task3(void)
58 {
59 /* 无限循环,不能返回 */
60 for (;;) {
61 /* 线程实体 */
62 if (flag3) {
63
64 }
65 }
66 }

       相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。三者系统模型区别如下表:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱的远日点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值