新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > stm32上移植了ucos,現(xiàn)在需要使用到DS18B20采集溫度

stm32上移植了ucos,現(xiàn)在需要使用到DS18B20采集溫度

作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
DS18B20的操作時序要使用到延時,我是用ucos的延時函數(shù)還是自己循環(huán)寫一個延時?
現(xiàn)在有個問題:假如用ucos的延時函數(shù),如果出現(xiàn)更高優(yōu)先級的任務(wù),那么會將讀DS18B20這個任務(wù)掛起,會破壞DS18B20的時序操作,讀不出來溫度。這個延時我應(yīng)該怎么處理?
分享到:
2012-08-14 08:40提問者采納
第一 讀取18B20的時候關(guān)閉任務(wù)切換,不進(jìn)行任務(wù)調(diào)度第二 通過任務(wù)通訊 互斥量或者郵箱 讓其他任務(wù)掛起第三 關(guān)閉中斷第四 將操作18b20的任務(wù)優(yōu)先級設(shè)置高點(diǎn)或者操作時提升其任務(wù)優(yōu)先級延時的話可以用ucos的延時函數(shù) 也可以自己寫,不過還是用ucos的好
追問
謝謝你的回答請問這是四種方法嗎???如果是,覺得第一種方法好點(diǎn),至于第四種,感覺沒用,又回到我原來的問題上了,提升18B20的優(yōu)先級,哪怕是最高的優(yōu)先級,只要使用ucos的延時,那么會去尋找第二高的優(yōu)先級,并且執(zhí)行,還是會破壞延時。另外一個問題,ucos使用的時鐘節(jié)拍是由STM32內(nèi)部的時鐘滴答定時器產(chǎn)生的,我設(shè)置的是1ms中斷一次,是不是每次一中斷就會去尋找優(yōu)先級最高的任務(wù),并且執(zhí)行呢?
回答
ucos每次都會讓處于就緒態(tài)的最高優(yōu)先級任務(wù)運(yùn)行,用ucos的延時, 18b20這個任務(wù)被掛起,并且記錄延時節(jié)拍數(shù),節(jié)拍數(shù)在系統(tǒng)時鐘中斷中不停的減,一旦檢測到延遲節(jié)拍數(shù)為0就會查看是不是需要進(jìn)行任務(wù)調(diào)度,18B20的任務(wù)得以重新運(yùn)行。
提問者評價
謝謝



關(guān)鍵詞: stm32移植ucosDS18B20采集溫

評論


技術(shù)專區(qū)

關(guān)閉