请问我在stm32上移植了ucos,现在需要使用到DS18B20采集温度
发布网友
发布时间:2022-10-11 16:23
我来回答
共2个回答
热心网友
时间:2023-10-13 21:55
第一 读取18B20的时候关闭任务切换,不进行任务调度
第二 通过任务通讯 互斥量或者邮箱 让其他任务挂起
第三 关闭中断
第四 将操作18b20的任务优先级设置高点或者操作时提升其任务优先级
延时的话可以用ucos的延时函数 也可以自己写,不过还是用ucos的好追问谢谢你的回答
请问这是四种方法吗???
如果是,觉得第一种方法好点,至于第四种,感觉没用,又回到我原来的问题上了,提升18B20的优先级,哪怕是最高的优先级,只要使用ucos的延时,那么会去寻找第二高的优先级,并且执行,还是会破坏延时。
另外一个问题,ucos使用的时钟节拍是由STM32内部的时钟滴答定时器产生的,我设置的是1ms中断一次,是不是每次一中断就会去寻找优先级最高的任务,并且执行呢?
追答ucos每次都会让处于就绪态的最高优先级任务运行,用ucos的延时, 18b20这个任务被挂起,并且记录延时节拍数,节拍数在系统时钟中断中不停的减,一旦检测到延迟节拍数为0就会查看是不是需要进行任务调度,18B20的任务得以重新运行。
热心网友
时间:2023-10-13 21:55
DS18B20驱动程序内部还是用自己写的延时!任务之间的延时用UCOS的延时函数。