OpenEdv-开源电子网

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

ucos任务调度问题

[复制链接]

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
发表于 2014-12-1 21:38:40 | 显示全部楼层 |阅读模式
5金钱
在延时的时候 ucos会去查任务就绪表,之后进行任务调度,那么延时多少会是它去切换任务??
比如使用i2c的时候us级别的延时,也会吗??

最佳答案

查看完整内容[请看2#楼]

如果是用的我们的例程的话,us级的延时是不会的,其实UCOS中延时会引发调度是要使用UCOS提供的延时函数才会的,比如OSTimeDly()或者OSTimeDlyHMSM()函数。如果你自己编写的延时函数的话一般就不会引发调度的。不管怎么样只要函数里面有OSSched()函数就会调度。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-12-1 21:38:41 | 显示全部楼层
如果是用的我们的例程的话,us级的延时是不会的,其实UCOS中延时会引发调度是要使用UCOS提供的延时函数才会的,比如OSTimeDly()或者OSTimeDlyHMSM()函数。如果你自己编写的延时函数的话一般就不会引发调度的。不管怎么样只要函数里面有OSSched()函数就会调度。
开往春天的手扶拖拉机
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-12-2 09:23:11 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
可是在原子的us和ms函数中都没看到OSSched()这个函数啊,那在ms延时的过程中,怎么还会进行调度呢?
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-12-2 09:30:32 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
我找到了,是不是如果延时时间小于ucos的最小时钟节拍,就不会引发调度了
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-12-2 10:10:08 | 显示全部楼层
1、你仔细看,如果使用了UCOS的话在delay_ms()函数中是调用了UCOS的OSTimeDly()函数的。
2、首先UCOS是不能延时比他最小节拍小的,比如如果系统时钟频率为200,那么最小延时就是5ms,但是我们常常需要小于5ms的延时,这个时候就需要我们自己编写这个延时函数了。我们的例程中的delay.c文件是支持了的,但是小于5ms的延时是不能引发调度的,原因在于我们提供的小于5ms的延时中并未调用OSSched()函数。
开往春天的手扶拖拉机
回复

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-12-2 12:47:48 | 显示全部楼层
回复【5楼】zuozhongkai:
---------------------------------
太感谢了,非常清晰
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 14:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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