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。