- μC/OS-III内核实现与应用开发实战指南:基于STM32
- 刘火良 杨森编著
- 398字
- 2023-07-18 17:10:43
5.3 main()函数
main()函数和任务代码变动不大,具体参见代码清单5-12,有变动的部分代码已加粗。
代码清单5-12 main()函数
1 int main(void) 2 { 3 OS_ERR err; 4 5 /* 关闭中断 */ 6 CPU_IntDis(); 7 8 /* 配置SysTick每10ms中断一次 */ 9 OS_CPU_SysTickInit (10); 10 11 /* 初始化相关的全局变量 */ 12 OSInit(&err);(1) 13 14 /* 创建任务 */ 15 OSTaskCreate ((OS_TCB*) &Task1TCB, 16 (OS_TASK_PTR ) Task1, 17 (void *) 0, 18 (CPU_STK*) &Task1Stk[0], 19 (CPU_STK_SIZE) TASK1_STK_SIZE, 20 (OS_ERR *) &err); 21 22 OSTaskCreate ((OS_TCB*) &Task2TCB, 23 (OS_TASK_PTR ) Task2, 24 (void *) 0, 25 (CPU_STK*) &Task2Stk[0], 26 (CPU_STK_SIZE) TASK2_STK_SIZE, 27 (OS_ERR *) &err); 28 29 /* 将任务加入就绪列表 */ 30 OSRdyList[0].HeadPtr = &Task1TCB; 31 OSRdyList[1].HeadPtr = &Task2TCB; 32 33 /* 启动操作系统,将不再返回 */ 34 OSStart(&err); 35 } 36 37 /* 任务1 */ 38 void Task1( void *p_arg ) 39 { 40 for ( ;; ) { 41 flag1 = 1; 42 //delay( 100 ); 43 OSTimeDly(2);(2) 44 flag1 = 0; 45 //delay( 100 ); 46 OSTimeDly(2); 47 48 /* 任务切换,这里是手动切换 */ 49 //OSSched(); 50 } 51 } 52 53 /* 任务2 */ 54 void Task2( void *p_arg ) 55 { 56 for ( ;; ) { 57 flag2 = 1; 58 //delay( 100 ); 59 OSTimeDly(2);(3) 60 flag2 = 0; 61 //delay( 100 ); 62 OSTimeDly(2); 63 64 /* 任务切换,这里是手动切换 */ 65 //OSSched(); 66 } 67 }
代码清单5-12(1):空闲任务初始化函数在OSInit()中调用,在系统启动之前创建好空闲任务。
代码清单5-12(2)(3):延时函数均替代为阻塞延时,延时时间均为2个SysTick中断周期,即20ms。