OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7157|回复: 16

移植ucos,低优先级的任务一直在运行,高优先级的任务没有运行

[复制链接]

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
发表于 2018-9-5 10:44:41 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-9-5 14:59:48 | 显示全部楼层
任务调度?  
用OSTimeDlyHMSM   或者 发送 等待 信号量 信号量集 之类的操作 来引发任务调度~ 不然就只有一个任务~
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-5 15:56:52 | 显示全部楼层
本帖最后由 Asdqwe115 于 2018-9-5 16:02 编辑

C:\Users\bryant.zhou\Desktop
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-5 16:09:48 | 显示全部楼层

用了OSTimeDlyHMSM,不知道问题出在哪

本帖最后由 Asdqwe115 于 2018-9-5 16:16 编辑
森海有眼泉 发表于 2018-9-5 14:59
任务调度?  
用OSTimeDlyHMSM   或者 发送 等待 信号量 信号量集 之类的操作 来引发任务调度~ 不然就只有 ...

Capture.PNG
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-9-6 09:20:34 | 显示全部楼层
那不知道了..我觉得可能是200ms 的延时太短了   两个程序  都有SLED=0 ,  导致你可能看不出什么变化..
建议你把任务一的延迟弄成2s  任务二的 5s  看看变化
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-6 09:44:59 | 显示全部楼层
森海有眼泉 发表于 2018-9-6 09:20
那不知道了..我觉得可能是200ms 的延时太短了   两个程序  都有SLED=0 ,  导致你可能看不出什么变化..
建 ...

能给个你的联系方式吗
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-7 13:24:28 | 显示全部楼层
森海有眼泉 发表于 2018-9-6 09:20
那不知道了..我觉得可能是200ms 的延时太短了   两个程序  都有SLED=0 ,  导致你可能看不出什么变化..
建 ...

void led0_task(void *pdata)     
{
        while(1)
        {


                SLED = 0x00;
                OSTimeDlyHMSM(0,0,0,2000);


        }       
}

void led1_task(void *pdata)
{
        while(1)
        {


                SLED = 0x01;
                OSTimeDlyHMSM(0,0,0,8000);
       
               
        }       
}

我把程序改成这样,灯是亮两秒,灭八秒,是不是反过来了
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-9-11 17:35:05 | 显示全部楼层
Asdqwe115 发表于 2018-9-7 13:24
void led0_task(void *pdata)     
{
        while(1)

不知道你的电路...led 可以单片机引脚驱动 拉高 亮 ~
也可以 外部供电. 单片机引脚 低 亮

没人规定 是高亮还是低亮
通常考虑到 单片机的电流输出能力,都是外部供电.单片机输出低 亮~
所以...你这个没反啊
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-11 20:56:43 | 显示全部楼层
森海有眼泉 发表于 2018-9-11 17:35
不知道你的电路...led 可以单片机引脚驱动 拉高 亮 ~
也可以 外部供电. 单片机引脚 低 亮

哦哦,谢谢你的指导!
现在的问题是我用示波器测了一下,第二个任务的延时时间是六秒,是减去第一个任务的延时时间,我也改变了两个任务的延时时间,几次都是这样
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-9-12 08:29:10 | 显示全部楼层
Asdqwe115 发表于 2018-9-11 20:56
哦哦,谢谢你的指导!
现在的问题是我用示波器测了一下,第二个任务的延时时间是六秒,是减去第一个任 ...

两点  一:不知道你什么意思 6秒没问题啊~ 8-2=6嘛
二: OSTimeDlyHMSM(0,0,0,8000); 为什么不写成OSTimeDlyHMSM(0,0,8,0)
回复

使用道具 举报

0

主题

109

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2018-9-2
在线时间
8 小时
发表于 2018-9-12 08:30:44 | 显示全部楼层
谢谢分享,不断的学习中
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-12 08:38:15 | 显示全部楼层
本帖最后由 Asdqwe115 于 2018-9-12 09:02 编辑
森海有眼泉 发表于 2018-9-12 08:29
两点  一:不知道你什么意思 6秒没问题啊~ 8-2=6嘛
二: OSTimeDlyHMSM(0,0,0,8000); 为什么不写成OSTime ...

那我任务一写OSTimeDlyHMSM(0,0,2,0)
任务二OSTimeDlyHMSM(0,0,4,0)
任务一和任务二的延时时间都是2秒
为什么任务二的延时要减去任务一的呢
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-9-12 10:37:31 | 显示全部楼层
Asdqwe115 发表于 2018-9-12 08:38
那我任务一写OSTimeDlyHMSM(0,0,2,0)
任务二OSTimeDlyHMSM(0,0,4,0)
任务一和任务二的延时时间都是2秒
...

因为你控制的 是一个 led 灯啊~ 你两个任务分别控制两个灯试试~
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-12 15:47:21 | 显示全部楼层
森海有眼泉 发表于 2018-9-12 10:37
因为你控制的 是一个 led 灯啊~ 你两个任务分别控制两个灯试试~

两个任务控制两个灯是正常的,为什么控制一个灯就会有这种现象啊,不怎么了解
回复

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2018-4-20
在线时间
24 小时
发表于 2018-9-27 13:01:58 | 显示全部楼层
Asdqwe115 发表于 2018-9-12 08:38
那我任务一写OSTimeDlyHMSM(0,0,2,0)
任务二OSTimeDlyHMSM(0,0,4,0)
任务一和任务二的延时时间都是2秒
...

"为什么任务二的延时药减去任务一的呢"

撇除你的控制对象,这是任务调度的问题吧?系统机制就这样。书上有说。
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2018-8-13
在线时间
60 小时
 楼主| 发表于 2018-9-28 08:49:03 | 显示全部楼层
phangbob 发表于 2018-9-27 13:01
"为什么任务二的延时药减去任务一的呢"

撇除你的控制对象,这是任务调度的问题吧?系统机制就这样。书 ...

谢谢老哥,书上具体怎么说的能截个图吗
回复

使用道具 举报

14

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2189
金钱
2189
注册时间
2017-2-20
在线时间
222 小时
发表于 2018-10-5 09:48:03 | 显示全部楼层
因为OSTimeDlyHMSM意味着任务主动放弃CPU使用权的时长,当高优先级的OSTimeDlyHMSM运行完延时后会对低优先级的任务CPU使用权进行抢夺。

任务调度分为任务级调度以及中断级调度。任务级调度就是使用OSTimeDlyHMSM函数进行主动的CPU释放,中断级调度在滴答定时器的中断函数里面每个时间节拍会对获取任务优先级列表中的最高优先级任务,并赋予最高优先级任务CPU使用权。

你用这个思路再看看你当个LED控制代码你就知道为什么,任务的延时跟你想象的不一样了。

ucos从某种角度看任务相当于并行处理,但并不是真正的并行处理。所以好好理解任务调度。
电子之路漫漫兮,吾将任总而道远。http://www.openedv.com/static/image/smiley/default/lol.gif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 08:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表