|  | 
 
| 任务一: 任务功能:每隔 1s 就在屏幕上显示一个大写字母 'M',显示完后清屏,继续循环显示。
 目的:初步应用 uc/os-ii,掌握任务建立的基本流程。
 任务代码:
 
 
 | #include "includes.h" #define  TASK_STK_SIZE                 512                   /*定义任务堆栈为512个字 */
 OS_STK        TaskStartStk[TASK_STK_SIZE];        /*定义任务堆栈*/
 
 void  TaskStart(void *pdata);                                      /*声明任务原型*/
 void  main (void)
 {
 PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);      /*清屏,黑背景白前景*/
 OSInit();                                              /* 初始化 uC/OS-II  */
 PC_DOSSaveReturn();                                    /*保存MS-DOS返回环境*/
 PC_VectSet(uCOS, OSCtxSw);                             /*安装 uC/OS-II's 切换向量*/
 OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); /*建立任务*/
 
 OSStart();                                             /*开始多任务管理*/
 }
 
 void  TaskStart (void *pdata)
 {
 #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
 OS_CPU_SR  cpu_sr;
 #endif
 INT16S     key;
 INT8U x = 0;
 INT8U y = 0;
 pdata = pdata;                                         /*阻止编译器警告*/
 
 OS_ENTER_CRITICAL();
 PC_VectSet(0x08, OSTickISR);                               /*安装 uC/OS-II's clock tick ISR        */
 PC_SetTickRate(OS_TICKS_PER_SEC);                      /* Reprogram tick rate                      */
 OS_EXIT_CRITICAL();
 OSStatInit();                                          /* Initialize uC/OS-II's statistics         */
 
 for (;;) {
 while( y <= 3 )               /*此任务仅显示完3行5列的M字母后便清屏重新显示*/
 {
 while( x <= 5)
 {
 PC_DispChar( x, y, 'M', DISP_FGND_WHITE);
 x++;
 if (PC_GetKey(&key) == TRUE)
 {
 if (key == 0x1B)
 {
 PC_DOSReturn();
 }
 }
 OSTimeDlyHMSM(0, 0, 1, 0);
 }
 y++;
 x = 0;
 }
 
 PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
 x = 0;
 y = 0;
 }
 }
 
 
 | 
 
 | 
 |