stm32上移植了ucos,現在需要使用到DS18B20采集溫度
現在有個問題:假如用ucos的延時函數,如果出現更高優先級的任務,那么會將讀DS18B20這個任務掛起,會破壞DS18B20的時序操作,讀不出來溫度。這個延時我應該怎么處理?
分享到:
2012-08-14 08:40提問者采納
第一 讀取18B20的時候關閉任務切換,不進行任務調度第二 通過任務通訊 互斥量或者郵箱 讓其他任務掛起第三 關閉中斷第四 將操作18b20的任務優先級設置高點或者操作時提升其任務優先級延時的話可以用ucos的延時函數 也可以自己寫,不過還是用ucos的好
追問
謝謝你的回答請問這是四種方法嗎???如果是,覺得第一種方法好點,至于第四種,感覺沒用,又回到我原來的問題上了,提升18B20的優先級,哪怕是最高的優先級,只要使用ucos的延時,那么會去尋找第二高的優先級,并且執行,還是會破壞延時。另外一個問題,ucos使用的時鐘節拍是由STM32內部的時鐘滴答定時器產生的,我設置的是1ms中斷一次,是不是每次一中斷就會去尋找優先級最高的任務,并且執行呢?
回答
ucos每次都會讓處于就緒態的最高優先級任務運行,用ucos的延時, 18b20這個任務被掛起,并且記錄延時節拍數,節拍數在系統時鐘中斷中不停的減,一旦檢測到延遲節拍數為0就會查看是不是需要進行任務調度,18B20的任務得以重新運行。
- 提問者評價
謝謝
評論