DS18B20的操作时序要运用到延时,我是用ucos的延时函数仍是自己循环写一个延时?
现在有个问题:假如用ucos的延时函数,假如呈现更高优先级的使命,那么会将读DS18B20这个使命挂起,会损坏DS18B20的时序操作,读不出来温度。这个延时我应该怎样处理?
共享到:
2012-08-14 08:40发问者采用
榜首 读取18B20的时分封闭使命切换,不进行使命调度第二 经过使命通讯 互斥量或许邮箱 让其他使命挂起第三 封闭中止第四 将操作18b20的使命优先级设置高点或许操作时提高其使命优先级延时的话能够用ucos的延时函数 也能够自己写,不过仍是用ucos的好
诘问
谢谢你的答复请问这是四种办法吗???假如是,觉得榜首种办法好点,至于第四种,感觉没用,又回到我本来的问题上了,提高18B20的优先级,哪怕是最高的优先级,只需运用ucos的延时,那么会去寻觅第二高的优先级,而且履行,仍是会损坏延时。别的一个问题,ucos运用的时钟节拍是由STM32内部的时钟滴答定时器发生的,我设置的是1ms中止一次,是不是每次一中止就会去寻觅优先级最高的使命,而且履行呢?
答复
ucos每次都会让处于安排妥当态的最高优先级使命运转,用ucos的延时, 18b20这个使命被挂起,而且记载延时节拍数,节拍数在体系时钟中止中不断的减,一旦检测到推迟节拍数为0就会检查是不是需求进行使命调度,18B20的使命得以从头运转。
- 发问者点评
-
谢谢