|
#include "includes.h" #define TASK_STK_SIZE 512 //任务堆栈长度 #define N_MESSAGES 1024 //任务堆栈长度 OS_STK StartTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区 INT16S key; //用于退出的键 INT8U err; // INT8U x=0,y=0,i=0; //字符显示位置 OS_EVENT *Str_Q; char *ss; char *s[5]; void *MsgGrp[N_MESSAGES]; //消息数组,消息数组存放着各消息的指针 INT8U a[5]={1000,1001,1002,1003,1004}; void StartTask(void *data); //声明任务 void MyTask(void *data); //声明任务 /************************主函数*************************************/ void main (void) { PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLUE); //清屏蓝底白字 OSInit(); //初始化uCOS_II PC_DOSSaveReturn(); //保存Dos环境 PC_VectSet(uCOS, OSCtxSw); //安装uCOS_II中断 Str_Q = OSQCreate( &MsgGrp[0], N_MESSAGES ); //创建消息队列 OSTaskCreate(StartTask, (void *)0, &StartTaskStk[TASK_STK_SIZE - 1], 0); //创建任务StartTask OSStart(); //启动多任务管理 } /************************ StartTask任务*************************************/ void StartTask(void *pdata) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); //安装时钟中断向量 PC_SetTickRate(OS_TICKS_PER_SEC); //设置uCOS_II时钟频率 OS_EXIT_CRITICAL(); OSStatInit(); //初始化统计任务 OSTaskCreate(MyTask,(void *)0, &MyTaskStk[TASK_STK_SIZE - 1], 3); //创建任务MyTask for(;;) { for(i=0;i<5;i++) {sprintf(&s,"%d",a); PC_DispStr(0,x++,&s,DISP_BGND_BLUE + DISP_FGND_WHITE); OSQPost(Str_Q,&s); } //如果按下Esc键则退出uCOS_II if( PC_GetKey(&key) == TRUE ) { if( key == 'q' ) { PC_DOSReturn(); } } OSTimeDlyHMSM(0,0,5,0); //等待5秒 } } /************************MyTask任务*************************************/ void MyTask (void *pdata) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; for (;;) { ss = OSQPend(Str_Q,0,&err); //请求消息 PC_DispStr(10,y++,ss,DISP_BGND_BLUE + DISP_FGND_WHITE); OSTimeDlyHMSM(0,0,1,0); //等待1秒 } } /************************End**************************************/
|
|