[STM32F1] ucos任务切换

[复制链接]
2367|13
 楼主| dddddddxxxx 发表于 2016-6-19 18:49 | 显示全部楼层 |阅读模式
最近在学UCOS,请教大家一个问题,就是任务切换。
static  void  AppTaskLed1 ( void * p_arg )
{  
    while (1) {                                         
                       
                LED1( ON );
                OSTimeDly (500, OS_OPT_TIME_DLY, & err );
    }
                               
}

static  void  AppTaskLed2 ( void * p_arg )
{  
    while (1) {                                         
                       
                LED2( ON );
                OSTimeDly (500, OS_OPT_TIME_DLY, & err );
    }
                               
}

有AppTaskLed1和AppTaskLed2两个任务,调用OSTimeDly()进行任务切换,比如说AppTaskLed1延时500ms到了,cpu切换到AppTaskLed2执行,此时AppTaskLed1此时没有执行,应该是不亮的,但下载到开发板上确是亮的,谁能解答一下。
lnulibin 发表于 2016-6-19 22:15 | 显示全部楼层
开完了灯,你不关灯。还问:为什么我走了,它还亮?

你不关灯,它当然一直亮了。
lnulibin 发表于 2016-6-19 22:22 | 显示全部楼层
   while (1) {                                         
                        
                LED2( ON );
                OSTimeDly (500, OS_OPT_TIME_DLY, & err );
               LED2( OFF );
               OSTimeDly (500, OS_OPT_TIME_DLY, & err );
    }

按照你的逻辑,似乎应该这么写。
善水盈渊 发表于 2016-6-19 23:17 | 显示全部楼层
本帖最后由 善水盈渊 于 2016-6-19 23:18 编辑

楼上的似乎也有问题,任务内的延时变长了,改成这样觉得怎么样?
static  void  AppTaskLed1 ( void * p_arg )
{  
    while (1) {                                         
                LED2( OFF );      
                LED1( ON );
                OSTimeDly (500, OS_OPT_TIME_DLY, & err );
    }
                                
}

static  void  AppTaskLed2 ( void * p_arg )
{  
    while (1) {                                         
                LED1( OFF );      
                LED2( ON );
                OSTimeDly (500, OS_OPT_TIME_DLY, & err );
    }
                                
}
zzwj5120 发表于 2016-6-19 23:37 | 显示全部楼层
一个任务控制一个灯,不要在另一个任务中操作前一个任务的东西
捉虫天师 发表于 2016-6-20 00:27 | 显示全部楼层
ucOS 就这么简单就嗯可以用了?
aerwa 发表于 2016-6-20 08:10 来自手机 | 显示全部楼层
没用过ucos,确实功能强大,还可以这么写?
sjssjssjs 发表于 2016-6-20 08:22 | 显示全部楼层
没有关闭led的操作
mmuuss586 发表于 2016-6-20 08:37 | 显示全部楼层
你这样写,2个任务都会执行到,灯一直亮了
世界心 发表于 2016-6-20 15:49 | 显示全部楼层
善水盈渊 发表于 2016-6-19 23:17
楼上的似乎也有问题,任务内的延时变长了,改成这样觉得怎么样?
static  void  AppTaskLed1 ( void * p_ar ...

哈哈,你这个不对。根本看不出来灯灭过
949155525 发表于 2016-6-20 17:49 来自手机 | 显示全部楼层
灯下黑问题
 楼主| dddddddxxxx 发表于 2016-6-20 19:42 | 显示全部楼层
lnulibin 发表于 2016-6-19 22:15
开完了灯,你不关灯。还问:为什么我走了,它还亮?

你不关灯,它当然一直亮了。 ...

很感谢回答我的问题,但我不理解的是:在任务1延时时,内核没有执行led1,既然没执行为何为亮,我个人理解是只有任务执行时才会亮,跟关不关灯没关系。能解释一下吗
Stannis 发表于 2016-6-20 21:41 | 显示全部楼层
在任务1延时时,内核没有执行led1,既然没执行为何为亮

会不会是执行了,仔细检查一下程序
Thethree 发表于 2016-6-20 22:38 | 显示全部楼层
你应该把点灯的程序改一下,改成当前状态取反
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

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