#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; } } |
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |