uCOS不支持计时器任务切换么?
ucos吧
全部回复
仅看楼主
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
level 11
ucos是实时抢占系统!高优先级的任务不结束或者挂起,是不会执行低优先级的任务的!延时函数里有挂起操作!
2014年05月15日 06点05分 2
level 11
我记得有任务挂起的函数
2014年05月16日 23点05分 3
level 11
你说的那个叫时间片轮询的非实时系统
2014年11月27日 06点11分 4
level 9
uc3可以时间片轮转
2014年11月28日 01点11分 5
level 1
修改还是在钩子函数里面比较好。。。你这样修改谁知道会不会影响系统的稳定性
2015年01月17日 08点01分 6
1