新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > μC/OS-II下中斷服務程序和外設驅動的開發

        μC/OS-II下中斷服務程序和外設驅動的開發

        作者: 時間:2016-10-08 來源:網絡 收藏

        包含環狀緩沖區字節數的計數器;

        本文引用地址:http://www.104case.com/article/201610/305861.htm

        環狀緩沖區中指向將被放置的下一字節的指針;

        環狀緩沖區中指向被取出的下一字節的指針。

        SerialGetehar()用來獲取接收到的數據,如果緩沖區已空時將任務掛起,接收到字節時,任務將被喚醒,同時從串行口接收字節。SerialPutRxChar()用來將接收的字節放到緩沖區中,如果接收緩沖區已滿,則該字節被丟棄。當字節插入到緩沖區中,SerialPutRxChar()通知數據接收信號量,使之將數據己到的消息傳達給所有等待的任務。為防止掛起應用任務,可以通過調用SceiallsEmPty()去發現環狀隊列中是否有字節。

        當需要發送數據給串行端口時,SerialPurChar()等待信號量在初始化發送信號量時應該初始為緩沖區的大小。因此,當緩沖區中沒有更多空間時,SerialPutChar()就掛起任務,只要UART再次發送字節,掛起任務就將恢復。SerialGctChar()被中斷服務程序調用,如果發送緩沖區至少還有一個字節,Seri-a1GetChar()就返回一個從緩沖區發送的字節。如果緩沖區己空,則SerialGetChar()返回Null,這將使調用停止進一步的發送中斷,一直到有數據發送為止。

        4 異步串行通信的接口函數

        應用任務可以通過如下的幾個函數來控制和訪問UART:SerialCfgPort()、SerialGetChar()、SerialInit()、SerialIsEmpty()、SerialIsFull()和SerialPutChar()。

        SerialCfgPort()用于建立串行端口的特征,在為指定端口調用其他服務前,必須先調用該函數,包括確定波特率、比特數、奇偶校驗和停止位等。

        SerialGetChar()使應用程序從接收數據的環狀緩沖區中取出數據。

        SerialInit()用于初始化整個串口軟件模塊,且必須在該模塊提供的其他任何服務前調用。SeriallInit()將環狀緩沖區計數器的字節數清零,并初始化每個環狀緩沖區的IN和OUT指針,指向數據存儲區的開始處。數據接收信號量初始化為0,表示在環狀緩沖區無數據。用傳送緩沖區大小初始化數據傳送信號量,表示緩沖區已空。

        SerialIsEmpty()允許應用程序確定是否有字節從串口接收進來。本函數允許在無數據時避免將任務掛起。

        SerialIsFull()允許應用程序確定傳送環狀緩沖區的狀態,本函數可以在緩沖區已滿時避免將任務掛起。

        SerialPutChar()允許應用程序向一個串行端口發送數據。

        結 語

        該串口通信模塊充分利用了實時內核的任務調度功能和信號量機制,系統軟件模塊化,可讀性增強,便于修改和移植,其設計思路和方法可以很好的應用在多種情況下的測控系統中,系統的擴展方便,具有一定的借鑒作用。該串口通信模塊已作為某鐵路供水遠程控制終端的一部分,運行穩定,提高了整個系統的運行效率和實時性。


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 北海市| 杭锦旗| 治多县| 凤庆县| 宝兴县| 萨迦县| 宜黄县| 乐业县| 桃园县| 青浦区| 利津县| 都江堰市| 探索| 锡林浩特市| 右玉县| 徐州市| 镇赉县| 长岛县| 墨玉县| 广南县| 汝城县| 绩溪县| 青州市| 观塘区| 永昌县| 广东省| 乌兰察布市| 保德县| 溆浦县| 垣曲县| 新丰县| 麦盖提县| 云阳县| 交城县| 资兴市| 荥经县| 沙雅县| 新竹市| 新昌县| 清镇市| 甘肃省|