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

[复制链接]
 楼主| dong130300 发表于 2013-5-23 17:49 | 显示全部楼层 |阅读模式
根据野火的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
在task_start执行之后又延时函数

这就是关键,延时函数 延时多少呢?
如果LED2运行时,start任务延时时间到了,肯定会任务调度的,当然调度器是开的。
 楼主| dong130300 发表于 2013-5-25 17:41 | 显示全部楼层
hwk612167 发表于 2013-5-25 14:44
这就是关键,延时函数 延时多少呢?
如果LED2运行时,start任务延时时间到了,肯定会任务调度的,当然调 ...

明白了 在延时结束之后确实进行了任务调度,我用串口显示结果,在延时1s之后调度到了start_task
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

35

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

4

主题

35

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部