写了段代码,但对结果感觉很困惑,关于ucos的,求大神指导

[复制链接]
 楼主| 神一样的少年 发表于 2013-12-4 17:47 | 显示全部楼层 |阅读模式
void Task_Start(void *p_arg)
{
    (void)p_arg;                                                // 'p_arg' 并没有用到,防止编译器提示警告

        OSTaskCreate(Task_LED2,(void *)0,                          //创建任务2
           &task_led2_stk[TASK_LED2_STK_SIZE-1], TASK_LED2_PRIO);

        OSTaskCreate(Task_LED3,(void *)0,                           //创建任务3
           &task_led3_stk[TASK_LED3_STK_SIZE-1], TASK_LED3_PRIO);

    while (1)
    {
        LED1( ON );
        OSTimeDlyHMSM(0, 0,0,300);
        LED1( OFF);   
        OSTimeDlyHMSM(0, 0,0,300);     
    }
}

//任务2
void Task_LED2(void *p_arg)
{
    (void)p_arg;                       
       
    while (1)
    {
        LED2( ON );
        OSTimeDlyHMSM(0, 0,0,300);
        LED2( OFF);
        OSTimeDlyHMSM(0, 0,0,300);       
    }
}

//任务3
void Task_LED3(void *p_arg)
{
    (void)p_arg;      
       
    while (1)
    {
        LED3( ON );
        OSTimeDlyHMSM(0, 0,0,300);
        LED3( OFF);
        OSTimeDlyHMSM(0, 0,0,300);  
       // LED4( ON );
       // OSTimeDlyHMSM(0, 0,0,300);
       // LED4( OFF);
                   // OSTimeDlyHMSM(0, 0,0,300);      
    }
}
本来以为led1,2,3会交替闪,结果却是同时亮灭,这是为什么?
 楼主| 神一样的少年 发表于 2013-12-4 17:59 | 显示全部楼层
优先级是这样的
#define        TASK_LED2_PRIO                        5
#define        TASK_LED3_PRIO                        6
delin17 发表于 2013-12-5 11:16 | 显示全部楼层
肯定是同步,差几个us时间。。
TASK2点完灯后,DELAY就到TASK点灯了
delin17 发表于 2013-12-5 11:17 | 显示全部楼层
你想交替的话,用消息或信号量来做。。

你现在对任务的切换还不是很了解的
 楼主| 神一样的少年 发表于 2013-12-5 15:08 | 显示全部楼层
delin17 发表于 2013-12-5 11:16
肯定是同步,差几个us时间。。
TASK2点完灯后,DELAY就到TASK点灯了

多谢,又仔细看了一下ostimedly()的代码,发现里面有任务调度
 楼主| 神一样的少年 发表于 2013-12-5 15:10 | 显示全部楼层
delin17 发表于 2013-12-5 11:17
你想交替的话,用消息或信号量来做。。

你现在对任务的切换还不是很了解的 ...

是的,很久之前看了一遍书,学的都不牢,看了一遍代码,发现ostimedly()里有任务调度函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

25

帖子

2

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