dong130300 发表于 2013-5-23 17:49

ucos移植到stm32之后任务调度问题

根据野火的ucos移植到stm32的程序,创建了三个用户任务,一个是Task_Start,优先级是4,一个是led2_task,优先级是5,一个是led3_task,优先级是6,systick的中断周期是10ms,在task_start中创建了led2_task,和led3_task,我让led2_task任务点亮led2,并且发送数据10000次
    while (1)
    {
   int i;
    for(i=0;i<10000;i++)   
   {
      LED2( ON );
                printf("\r\n this is a task_led2 demo \r\n");
   }
      OSTimeDlyHMSM(0, 0,2,0);
      LED2( OFF);
                printf("\r\n this is a task_led2 demo end\r\n");
                OSTimeDlyHMSM(0, 0,2,0);      
               
    }
但是在这10000次的时候肯定是会大于10ms的,那么不是就会进行任务切换吗,找到最高优先级的就绪任务task_start,然后切换到task_start吗,可是为什么他是等led2的10000次完成之后在 OSTimeDlyHMSM(0, 0,2,0);延时的时候才开始任务切换啊

dong130300 发表于 2013-5-24 15:20

各位大神 帮帮忙啊 是我对ucos的理解有误吗

dld2 发表于 2013-5-24 15:34

如果task_start优先级最高,那么led2是怎么获得运行权的?

dong130300 发表于 2013-5-24 15:48

在task_start执行之后又延时函数

hwk612167 发表于 2013-5-25 14:44

dong130300 发表于 2013-5-24 15:48 static/image/common/back.gif
在task_start执行之后又延时函数

这就是关键,延时函数 延时多少呢?
如果LED2运行时,start任务延时时间到了,肯定会任务调度的,当然调度器是开的。

dong130300 发表于 2013-5-25 17:41

hwk612167 发表于 2013-5-25 14:44 static/image/common/back.gif
这就是关键,延时函数 延时多少呢?
如果LED2运行时,start任务延时时间到了,肯定会任务调度的,当然调 ...

明白了 在延时结束之后确实进行了任务调度,我用串口显示结果,在延时1s之后调度到了start_task
页: [1]
查看完整版本: ucos移植到stm32之后任务调度问题