程序清单 L 1.14 任务2 void Task2 (void *data) { data = data; for (;;) {  C_DispChar(70, 15, '|', DISP_FGND_WHITE + DISP_BGND_RED); OSTimeDly(10);  C_DispChar(70, 15, '/', DISP_FGND_WHITE + DISP_BGND_RED); OSTimeDly(10);  C_DispChar(70, 15, '-', DISP_FGND_WHITE + DISP_BGND_RED); OSTimeDly(10);  C_DispChar(70, 15, '\\', DISP_FGND_WHITE + DISP_BGND_RED); OSTimeDly(10); } }
任务3(程序清单 L1.15)也显示了与任务2相同的一个旋转指针,但是旋转的方向不同。任务3在堆栈中分配了一个很大的数组,将堆栈填充掉,使得OSTaskStkChk()只需花费很少的时间来确定堆栈的利用率,尤其是当堆栈已经快满的时候。
程序清单 L 1.15 任务3 void Task3 (void *data) { char dummy[500]; INT16U i; data = data; for (I = 0; i < 499; i++) { dummy = '?'; } for (;;) {  C_DispChar(70, 16, '|', DISP_FGND_WHITE + DISP_BGND_BLUE); OSTimeDly(20);  C_DispChar(70, 16, '\\', DISP_FGND_WHITE + DISP_BGND_BLUE); OSTimeDly(20);  C_DispChar(70, 16, '-', DISP_FGND_WHITE + DISP_BGND_BLUE); OSTimeDly(20);  C_DispChar(70, 16, '/', DISP_FGND_WHITE + DISP_BGND_BLUE); OSTimeDly(20); } }
任务4(程序清单L1.16)向任务5发送消息并等待确认[程序清单L1.16(1)]。发送的消息是一个指向字符的指针。每当任务4从任务5收到确认[程序清单L1.16(2)],就将传递的ASCII码加1再发送[程序清单L1.16(3)],结果是不断的传送“ABCDEFG....”。
程序清单 L 1.16 任务4 void Task4 (void *data) { char txmsg; INT8U err;
data = data; txmsg = 'A'; for (;;) { while (txmsg <= 'Z') { OSMboxPost(TxMbox, (void *)&txmsg); (1) OSMboxPend(AckMbox, 0, &err); (2) txmsg++; (3) } txmsg = 'A'; } }
当任务5 [程序清单L1.17]接收消息后[程序清单L1.17(1)](发送的字符),就将消息显示到屏幕上[程序清单L1.17(2)],然后延时1秒[程序清单L1.17(3)],再向任务4发送确认信息。
程序清单 L 1.17 任务5 void Task5 (void *data) { char *rxmsg; INT8U err; data = data; for (;;) { rxmsg = (char *)OSMboxPend(TxMbox, 0, &err); (1)  C_DispChar(70, 18, *rxmsg, DISP_FGND_YELLOW+DISP_BGND_RED); (2) OSTimeDlyHMSM(0, 0, 1, 0); (3) OSMboxPost(AckMbox, (void *)1); (4) } }
TaskClk()函数[程序清单L1.18]显示当前日期和时间,每秒更新一次。
程序清单 L 1.18 时钟显示任务 void TaskClk (void *data) { Struct time now; Struct date today; char s[40];
data = data; for (;;) {  C_GetDateTime(s); PC_DispStr(0, 24, s, DISP_FGND_BLUE + DISP_BGND_CYAN); OSTimeDly(OS_TICKS_PER_SEC); } } 1.09例3 例3中使用了许多uCOS-II提供的附加功能。任务3使用了OSTaskCreateExt()中TCB的扩展数据结构,用户定义的任务切换对外接口函数(OSTaskSwHook()),用户定义的统计任务(statistic task )的对外接口函数(OSTaskStatHook())以及消息队列。例3的磁盘文件是\SOFTWARE\uCOS-II\EX3_x86L,它包括9个任务。除了空闲任务(idle task)和统计任务(statistic task ),还有7个任务。与例1,例2一样,TaskStart()由main()函数建立,其功能是建立其他任务,并显示统计信息。
[此贴子已经被作者于2005-11-28 16:31:42编辑过] |