新闻中心

EEPW首页>嵌入式系统>设计应用> stm32上移植了ucos,现在需要使用到DS18B20采集温度

stm32上移植了ucos,现在需要使用到DS18B20采集温度

作者: 时间:2016-11-21 来源:网络 收藏
DS18B20的操作时序要使用到延时,我是用ucos的延时函数还是自己循环写一个延时?
现在有个问题:假如用ucos的延时函数,如果出现更高优先级的任务,那么会将读DS18B20这个任务挂起,会破坏DS18B20的时序操作,读不出来温度。这个延时我应该怎么处理?
分享到:
2012-08-14 08:40提问者采纳
第一 读取18B20的时候关闭任务切换,不进行任务调度第二 通过任务通讯 互斥量或者邮箱 让其他任务挂起第三 关闭中断第四 将操作18b20的任务优先级设置高点或者操作时提升其任务优先级延时的话可以用ucos的延时函数 也可以自己写,不过还是用ucos的好
追问
谢谢你的回答请问这是四种方法吗???如果是,觉得第一种方法好点,至于第四种,感觉没用,又回到我原来的问题上了,提升18B20的优先级,哪怕是最高的优先级,只要使用ucos的延时,那么会去寻找第二高的优先级,并且执行,还是会破坏延时。另外一个问题,ucos使用的时钟节拍是由STM32内部的时钟滴答定时器产生的,我设置的是1ms中断一次,是不是每次一中断就会去寻找优先级最高的任务,并且执行呢?
回答
ucos每次都会让处于就绪态的最高优先级任务运行,用ucos的延时, 18b20这个任务被挂起,并且记录延时节拍数,节拍数在系统时钟中断中不停的减,一旦检测到延迟节拍数为0就会查看是不是需要进行任务调度,18B20的任务得以重新运行。
提问者评价
谢谢



评论


技术专区

关闭