请问我在stm32上移植了ucos,现在需要使用到DS18B20采集温度
DS18B20的操作时序要使用到延时,我是用ucos的延时函数还是自己循环写一个延时?现在有个问题:假如用ucos的延时函数,如果出现更高优先级的任务,那么会将读DS18...
DS18B20的操作时序要使用到延时,我是用ucos的延时函数还是自己循环写一个延时?
现在有个问题:假如用ucos的延时函数,如果出现更高优先级的任务,那么会将读DS18B20这个任务挂起,会破坏DS18B20的时序操作,读不出来温度。这个延时我应该怎么处理? 展开
现在有个问题:假如用ucos的延时函数,如果出现更高优先级的任务,那么会将读DS18B20这个任务挂起,会破坏DS18B20的时序操作,读不出来温度。这个延时我应该怎么处理? 展开
2个回答
展开全部
第一 读取18B20的时候关闭任务切换,不进行任务调度
第二 通过任务通讯 互斥量或者邮箱 让其他任务挂起
第三 关闭中断
第四 将操作18b20的任务优先级设置高点或者操作时提升其任务优先级
延时的话可以用ucos的延时函数 也可以自己写,不过还是用ucos的好
第二 通过任务通讯 互斥量或者邮箱 让其他任务挂起
第三 关闭中断
第四 将操作18b20的任务优先级设置高点或者操作时提升其任务优先级
延时的话可以用ucos的延时函数 也可以自己写,不过还是用ucos的好
追问
谢谢你的回答
请问这是四种方法吗???
如果是,觉得第一种方法好点,至于第四种,感觉没用,又回到我原来的问题上了,提升18B20的优先级,哪怕是最高的优先级,只要使用ucos的延时,那么会去寻找第二高的优先级,并且执行,还是会破坏延时。
另外一个问题,ucos使用的时钟节拍是由STM32内部的时钟滴答定时器产生的,我设置的是1ms中断一次,是不是每次一中断就会去寻找优先级最高的任务,并且执行呢?
追答
ucos每次都会让处于就绪态的最高优先级任务运行,用ucos的延时, 18b20这个任务被挂起,并且记录延时节拍数,节拍数在系统时钟中断中不停的减,一旦检测到延迟节拍数为0就会查看是不是需要进行任务调度,18B20的任务得以重新运行。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过100...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询