level 8
乌月风随
楼主
使用的是Borland C++的uCOS代码。我对例1做了点更改,创建一个优先级为1的任务,该任务显示字幕N,不延时,结果屏幕中只显示N。如果把0优先级任务的延时也去掉的话屏幕中就神马都没有了。这就是说如果高优先级任务不延时,低优先级任务就没法运行了。最初还以为可以使用计时器中断来进行任务切换的,没想到还要在任务中考虑这个问题。呃呃呃……
static void TaskStartCreateTasks (void)
{
INT8U i;
for (i = 0 + 1; i < N_TASKS; i++) { /* Create N_TASKS identical tasks */
TaskData[i] = '0' + i; /* Each task will display its own letter */
OSTaskCreate(Task, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i + 1);
}
/*下面是我加的代码,创建一个优先级为1的任务Task2,显示字幕N,该任务除了没有延时其他的跟Task一样*/
i = 0 ;
TaskData[i] = 'N';
OSTaskCreate(Task2, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i + 1);
}
/*
*********************************************************************************************************
* TASKS
*********************************************************************************************************
*/
void Task (void *pdata)
{
INT8U x;
INT8U y;
INT8U err;
for (;;) {
OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
x = random(80); /* Find X position where task number will appear */
y = random(16); /* Find Y position where task number will appear */
OSSemPost(RandomSem); /* Release semaphore */
/* Display the task number on the screen */
PC_DispChar(x, y + 5, *(char *)pdata, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDly(1); /* Delay 1 clock tick */
}
}
/*直接复制Task的代码,去掉最后的OSTimeDly(1)*/
void Task2 (void *pdata)
{
INT8U x;
INT8U y;
INT8U err;
for (;;) {
OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
x = random(80); /* Find X position where task number will appear */
y = random(16); /* Find Y position where task number will appear */
OSSemPost(RandomSem); /* Release semaphore */
/* Display the task number on the screen */
PC_DispChar(x, y + 5, *(char *)pdata, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
/* OSTimeDly(1);*/ /* Delay 1 clock tick */
}
}
2014年02月02日 16点02分
1
static void TaskStartCreateTasks (void)
{
INT8U i;
for (i = 0 + 1; i < N_TASKS; i++) { /* Create N_TASKS identical tasks */
TaskData[i] = '0' + i; /* Each task will display its own letter */
OSTaskCreate(Task, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i + 1);
}
/*下面是我加的代码,创建一个优先级为1的任务Task2,显示字幕N,该任务除了没有延时其他的跟Task一样*/
i = 0 ;
TaskData[i] = 'N';
OSTaskCreate(Task2, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i + 1);
}
/*
*********************************************************************************************************
* TASKS
*********************************************************************************************************
*/
void Task (void *pdata)
{
INT8U x;
INT8U y;
INT8U err;
for (;;) {
OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
x = random(80); /* Find X position where task number will appear */
y = random(16); /* Find Y position where task number will appear */
OSSemPost(RandomSem); /* Release semaphore */
/* Display the task number on the screen */
PC_DispChar(x, y + 5, *(char *)pdata, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDly(1); /* Delay 1 clock tick */
}
}
/*直接复制Task的代码,去掉最后的OSTimeDly(1)*/
void Task2 (void *pdata)
{
INT8U x;
INT8U y;
INT8U err;
for (;;) {
OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
x = random(80); /* Find X position where task number will appear */
y = random(16); /* Find Y position where task number will appear */
OSSemPost(RandomSem); /* Release semaphore */
/* Display the task number on the screen */
PC_DispChar(x, y + 5, *(char *)pdata, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
/* OSTimeDly(1);*/ /* Delay 1 clock tick */
}
}