新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Small RTOS51的多任務串行通信研究

        基于Small RTOS51的多任務串行通信研究

        作者: 時間:2009-07-09 來源:網絡 收藏

        2.1 多的實現
        根據所要完成的功能,系統可由1個串口中斷服務程序和4個用戶來實現:
        串口中斷服務程序,當數據到達串口接收緩沖區并產生中斷時,該中斷服務程序負責從接收緩沖區讀取數據,并加入用戶自定義的接收緩沖隊列。若完整地接收了一個數據包,則向數據處理發送信號量,表明有數據包等待處理,否則中斷服務程序結束。串口中斷下次到來時,繼續由該中斷服務程序接收串口數據。數據處理任務,執行時首先無限期等待中斷服務程序發送信號量,成功獲取信號量后,從自定義的接收緩沖隊列中取出數據包進行數據解碼,并通過I2C總線發送數據到顯示電路。
        看門狗任務,每次運行都反轉單片機P89V51RD2輸出到看門狗電路的I/O引腳電平(喂看門狗),表明P89V51RD2內部程序正常運轉,以確保看門狗電路不會將P89V51RD2復位,然后使本身進入等待狀態,等待時間到后再次運行。
        鍵盤掃描任務,負責掃描鍵盤電路,檢測是否有按鍵被按下,若檢測到某一按鍵被按下,則獲取鍵值,并發送消息給按鍵處理任務。
        按鍵處理任務,執行時首先無限期等待按鍵掃描任務發送消息,成功獲取消息后,根據按鍵值(消息內容)和當前系統狀態生成一串命令數據,通過串口向遠端發送。
        系統中程序的執行順序如圖3所示。首先從主程序即main()函數開始執行,在main()函數中完成實時操作系統、系統定時器、串口、消息、變量和外圍設備的初始化工作,然后創建用戶任務,最后主程序放棄CPU資源,任務優先級最高的任務開始執行。

        實時操作系統支持16個優先級,0為最高優先級,15為最低優先級。程序中將看門狗任務置為最高優先級,因為它必須定期向看門狗電路輸出喂狗信號。將它置為最高優先級,使其優先運行,可以保證單片機P89V51RD2不會被看門狗電路復位。為了能及時處理串口中斷服務程序讀取的數據包,數據處理任務也應當具有比較高的優先級。同樣,在檢測到有按鍵被按下時,考慮到按鍵處理的實時性,也不能將按鍵處理任務的優先級設得太低。可以將鍵盤掃描任務置為最低優先級,當沒有數據到達串口,在看門狗任務運行的間隙,鍵盤掃描任務一直運行,一旦檢測有按鍵被按下,立即發送消息給按
        鍵處理任務,按鍵處理任務獲得消息后解除掛起狀態,搶占CPU資源開始運行。因手工連續按下兩次按鍵的時間間隔遠大于按鍵處理任務進行一次數據處理的時間,故而這樣的優先級設置既保證了鍵盤操作能及時被處理,又不影響檢測連續的鍵盤操作。
        2.2 任務間的與同步
        應用中,串口中斷服務程序與數據處理任務之間、鍵盤掃描任務與按鍵處理任務之間都需要進行同步和,前者使用信號量進行同步和,后者使用消息。

        串口中斷服務程序接收到一個完整的數據包后,發送一個信號量給數據處理任務,因等待信號量而處于掛起狀態的數據處理任務獲得信號量后,立即從用戶自定義的接收緩沖隊列取出數據包進行處理。鍵盤掃描任務檢測到按鍵被按下時,進行去抖動處理并獲取鍵值。然后,以鍵值作為消息內容,發送消息給按鍵處理任務。因等待消息而掛起的按鍵處理任務取得消息后,根據消息內容(鍵值)和當前系統狀態,生成一串命令數據并通過串口向遠端發送。

        結 語
        本文舉例說明了 環境下包含多任務的通信,重點敘述了多任務的執行過程和任務間的同步與通信。該應用系統經過較長時問的測試,沒有發生數據到達串口時因沒能及時處理而被后來到達的數據覆蓋而造成丟失的情況,也沒有發生按下按鍵時不能及時處理的情況,應用系統的可靠性和實時性要求均可滿足。
        Small RTOS51是一個占用系統資源極小的嵌入式實時操作系統,可以應用在絕大多數單片機上,而且移植過程簡單。使用它開發單片機的多任務應用系統,可以較大地縮短開發周期。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 延庆县| 三都| 东兰县| 南安市| 东至县| 河北省| 夏津县| 隆德县| 车致| 九龙坡区| 扎囊县| 体育| 彭阳县| 日喀则市| 大田县| 临泉县| 辽宁省| 兴国县| 兴城市| 兴隆县| 久治县| 瑞丽市| 上犹县| 金山区| 邯郸县| 沐川县| 石台县| 涪陵区| 友谊县| 平利县| 修水县| 泽州县| 东源县| 台安县| 岳阳市| 中方县| 汶川县| 白朗县| 叶城县| 固安县| 佳木斯市|