|
功能:在任务中创建一个新的任务,第一个任务显示M字母,第二个任务显示Y字母,每隔1s轮流现实
目的:熟悉在任务中创建一个新的任务
程序代码:#include "includes.h"
#define TASK_STK_SIZE 512
OS_STK DispCharMStk[TASK_STK_SIZE];
OS_STK DispCharYStk[TASK_STK_SIZE];
void DispCharM(void *data);
void DispCharY(void *data);
void main (void)
{
char *s_M = "M";
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS, OSCtxSw);
OSTaskCreate(DispCharM, s_M, &DispCharMStk[TASK_STK_SIZE - 1], 0);
OSStart();
}
void DispCharM (void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT16S key;
char *s_Y = "Y";
INT8U x = 0;
INT8U y = 0;
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(DispCharY, s_Y, &DispCharYStk[TASK_STK_SIZE - 1], 1);
for (;;)
{
PC_DispChar( x, y, *(char *)pdata, DISP_FGND_WHITE);
if( PC_GetKey(&key) == TRUE )
{
if( key == 0x1B )
{
PC_DOSReturn();
}
}
x += 2;
if( x > (DISP_MAX_X - 1) )
{
y++;
x = 0;
}
if( y >= (DISP_MAX_Y - 1) )
{
y = 0;
x = 0;
}
OSTimeDlyHMSM(0,0,2,0); //waitt for 1s
}
}
void DispCharY(void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT8U x = 1;
INT8U y = 0;
INT16S key;
pdata = pdata;
for (;;)
{
OSTimeDlyHMSM(0,0,1,0); /*此时只有空闲任务和统计任务在运行*/
PC_DispChar( x, y, *(char *)pdata, DISP_FGND_WHITE);
if( PC_GetKey(&key) == TRUE )
{
if( key == 0x1B )
{
PC_DOSReturn();
}
}
x += 2;
if( x > DISP_MAX_X - 1)
{
y++;
x = 1;
}
if( y > DISP_MAX_Y - 1)
{
y = 0;
x = 1;
}
OSTimeDlyHMSM(0,0,1,0); //waitt for 1s
}
} |
|