新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32上移植了ucos,現在需要使用到DS18B20采集溫度

        stm32上移植了ucos,現在需要使用到DS18B20采集溫度

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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 临朐县| 丰都县| 迁安市| 新安县| 额尔古纳市| 兰西县| 保山市| 静海县| 博白县| 炉霍县| 永清县| 利川市| 英山县| 尤溪县| 邹城市| 萨迦县| 恭城| 改则县| 墨江| 仪陇县| 襄城县| 红安县| 双江| 柳江县| 黑山县| 尉犁县| 苍山县| 德令哈市| 沂南县| 宜川县| 宁德市| 宁河县| 宜兴市| 陆川县| 察隅县| 肥乡县| 酉阳| 灵寿县| 万荣县| 绥化市| 光山县|