- μC/OS-III内核实现与应用开发实战指南:基于STM32
- 刘火良 杨森编著
- 654字
- 2023-07-18 17:10:36
第3章 任务的定义与任务切换
本章我们真正开始从0到1写RTOS。必须学会创建任务,并重点掌握任务是如何切换的。因为任务的切换是由汇编代码来完成的,所以代码看起来比较难懂,但是我们会尽力把代码讲得透彻。如果不能掌握本章内容,那么后面的内容根本无从下手。
在本章中,我们会创建两个任务,并让这两个任务不断地切换,任务的主体都是让一个变量按照一定的频率翻转,通过KEIL的软件仿真功能,在逻辑分析仪中观察变量的波形变化,最终的波形图如图3-1所示。
图3-1 任务轮流切换波形图
其实,图3-1所示的波形图并不是真正的多任务系统中任务切换的效果图,这个效果其实可以完全由裸机代码实现,具体参见代码清单3-1。
代码清单3-1 裸机系统中两个变量轮流翻转
1 /* flag 必须定义成全局变量才能添加到逻辑分析仪中观察波形 2 ** 在逻辑分析仪中要设置为位(Bit)模式才能看到波形,不能使用默认的模拟量 3 */ 4 uint32_t flag1; 5 uint32_t flag2; 6 7 8 /* 软件延时,不必纠结具体的时间 */ 9 void delay( uint32_t count ) 10 { 11 for (; count!=0; count--); 12 } 13 14 int main(void) 15 { 16 /* 无限循环,顺序执行 */ 17 for (;;) { 18 flag1 = 1; 19 delay( 100 ); 20 flag1 = 0; 21 delay( 100 ); 22 23 flag2 = 1; 24 delay( 100 ); 25 flag2 = 0; 26 delay( 100 ); 27 } 28 }
在多任务系统中,两个任务不断切换的效果图应该如图3-2所示,即两个变量的波形是完全一样的,就好像CPU在同时做两件事,这才是多任务的意义。虽然两者的波形图一样,但是代码的实现方式是完全不同的,由原来的顺序执行变成了任务的主动切换,这是根本区别。本章只是开始,我们先掌握好任务是如何切换的,在后面章节中,会陆续完善功能代码,加入系统调度,实现真正的多任务。
图3-2 多任务系统中的任务切换波形图