"); //-->
代码:
/* ********************************************************************************************************* * uC/OS-II * The Real-Time Kernel * * (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL * All Rights Reserved * * EXAMPLE #1 ********************************************************************************************************* */ #include "includes.h" /* ********************************************************************************************************* * CONSTANTS ********************************************************************************************************* */ #define TASK_STK_SIZE 512 /* Size of each task's stacks (# of WORDs) */ OS_STK StartTaskStk[TASK_STK_SIZE]; OS_STK MyTaskStk[TASK_STK_SIZE]; OS_STK YouTaskStk[TASK_STK_SIZE]; OS_STK HerTaskStk[TASK_STK_SIZE]; INT16S key; char *s1="MyTask running"; char *s2="YouTask running"; char *s3="HerTask running"; INT8U err; INT8U y=0; OS_EVENT *Sem_F; void StartTask(void *data); void MyTask(void *data); void YouTask(void *data); void HerTask(void *data); void main (void) { OSInit(); /* Initialize uC/OS-II */ PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */ Sem_F=OSFlagCreate(0,&err); OSTaskCreate(StartTask, (void*)0, &StartTaskStk[TASK_STK_SIZE - 1], 0); OSStart(); /* Start multitasking */ } void StartTask(void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif pdata = pdata; /* Prevent compiler warning */ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /* Install 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 */ OSTaskCreate(MyTask, (void*)0, &MyTaskStk[TASK_STK_SIZE - 1], 3); OSTaskCreate(YouTask, (void*)0, &YouTaskStk[TASK_STK_SIZE - 1], 4); OSTaskCreate(HerTask, (void*)0, &HerTaskStk[TASK_STK_SIZE - 1], 5); for (;;) { if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */ if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */ PC_DOSReturn(); /* Return to DOS */ } } OSTimeDlyHMSM(0,0,3,0); /* Wait one second */ } } /* ********************************************************************************************************* * STARTUP TASK ********************************************************************************************************* */ void MyTask(void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif pdata = pdata; /* Prevent compiler warning */ for (;;) { OSFlagPend( Sem_F, (OS_FLAGS)3, OS_FLAG_WAIT_SET_ALL, 0, &err); PC_DispStr( 10,++y, s1, DISP_BGND_BLACK+DISP_FGND_WHITE ); OSTimeDlyHMSM(0,0,2,0); /* Wait one second */ } } void YouTask(void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif pdata = pdata; /* Prevent compiler warning */ for (;;) { PC_DispStr( 10,++y, s2, DISP_BGND_BLACK+DISP_FGND_WHITE ); OSTimeDlyHMSM(0,0,8,0); OSFlagPost( Sem_F, (OS_FLAGS)2, OS_FLAG_SET, &err ); OSTimeDlyHMSM(0,0,2,0); /* Wait one second */ } } void HerTask(void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif pdata = pdata; /* Prevent compiler warning */ for (;;) { PC_DispStr( 10,++y, s3, DISP_BGND_BLACK+DISP_FGND_WHITE ); OSFlagPost( Sem_F, (OS_FLAGS)1, OS_FLAG_SET, &err ); OSTimeDlyHMSM(0,0,1,0); /* Wait one second */ } }
运行
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。