打印
[STM32F1]

ucos任务切换

[复制链接]
1925|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 );
    }
                                
}

使用特权

评论回复
5
zzwj5120| | 2016-6-19 23:37 | 只看该作者
一个任务控制一个灯,不要在另一个任务中操作前一个任务的东西

使用特权

评论回复
6
捉虫天师| | 2016-6-20 00:27 | 只看该作者
ucOS 就这么简单就嗯可以用了?

使用特权

评论回复
7
aerwa| | 2016-6-20 08:10 | 只看该作者
没用过ucos,确实功能强大,还可以这么写?

使用特权

评论回复
8
sjssjssjs| | 2016-6-20 08:22 | 只看该作者
没有关闭led的操作

使用特权

评论回复
9
mmuuss586| | 2016-6-20 08:37 | 只看该作者
你这样写,2个任务都会执行到,灯一直亮了

使用特权

评论回复
10
世界心| | 2016-6-20 15:49 | 只看该作者
善水盈渊 发表于 2016-6-19 23:17
楼上的似乎也有问题,任务内的延时变长了,改成这样觉得怎么样?
static  void  AppTaskLed1 ( void * p_ar ...

哈哈,你这个不对。根本看不出来灯灭过

使用特权

评论回复
11
949155525| | 2016-6-20 17:49 | 只看该作者
灯下黑问题

使用特权

评论回复
12
dddddddxxxx|  楼主 | 2016-6-20 19:42 | 只看该作者
lnulibin 发表于 2016-6-19 22:15
开完了灯,你不关灯。还问:为什么我走了,它还亮?

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

很感谢回答我的问题,但我不理解的是:在任务1延时时,内核没有执行led1,既然没执行为何为亮,我个人理解是只有任务执行时才会亮,跟关不关灯没关系。能解释一下吗

使用特权

评论回复
13
Stannis| | 2016-6-20 21:41 | 只看该作者
在任务1延时时,内核没有执行led1,既然没执行为何为亮

会不会是执行了,仔细检查一下程序

使用特权

评论回复
14
Thethree| | 2016-6-20 22:38 | 只看该作者
你应该把点灯的程序改一下,改成当前状态取反

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝