|
任务一:
任务功能:每隔 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;
}
}
|
|
|