UCOS 操作系统 问题

int main(void)
{

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

LED_Init();
__enable_interrupt();
OSInit();
OSTaskCreate(TestTask1,(void *)0,&TestTaskStk1[99],0);
OSStart();
}
void TestTask1(void *pdata)
{
char flag=0;
pdata=pdata;

Tim1_Init(); //初始化定时器 10ms一次中断
SetLedON();

while(1)
{
OSTimeDly(100); //程序在此休眠,进入别的任务,等到调用OSTimeISR中的OSTickTime进行检测是否有优先级更高的任务

if(flag==0)
{
SetLedOFF();
flag=1;
}
else
{
SetLedON();
flag=0;
}
}
}

1:如上代码,为什么在任务中要有一个OSTimeDly(100); 没有这个延时不行吗?
没有延时是不是就不会运行低优先级的任务了?为什么?
2:如果再创建一个任务,是不是写个像void TestTask1(void *pdata) 这样的函数就OK 了,要注意哪些地方代码变化?
求高手指教。

1.ucos建议每个任务都在适当的地方加入延时函数,以避免死在一个任务中系统瘫痪;但不是必须的,如果一个任务通过pend其他任务或isr发送的事件,事件没有被post前会自动挂起,调度其他就绪任务中最高优先级任务执行。

2.新建立一个任务,至少要给他分配一个堆栈,定义任务函数体(类似TestTask1()),并调用OSTaskCreate()创建任务。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-07
1、没有延时也行,但是led变化就看不出来了,低优先级的还会运行的
2、可以这样创建任务,但是要现在main里创建,如:
上面的OSTaskCreate(TestTask1,(void *)0,&TestTaskStk1[99],0);
而且堆栈要先声明。不过一般不用优先级为0的任务

OSTaskCreate(TestTask1, (void *)0, (void *)&TaskStk1[99],6); /*建立任务1 */
OSTaskCreate(TestTask2, (void *)0, (void *)&TaskStk2[99],7); /*建立任务2 */
相似回答