LPC2365的μC/OS-II 下多串口通信編程
3 軟件設計
3.1 μC/OS-II的移植
μC/OS-II是一個(gè)完整的、可移植、可固化、可裁剪、源代碼公開(kāi)的占先式實(shí)時(shí)多任務(wù)內核,它可移植到多種不同架構的微處理器上,包括8位、16位、32位單片機或DSP,以及64位的微處理器。
要在自己的硬件環(huán)境中運行該操作系統,首先必須將其移植到相應CPU體系結構中,好在國內已有大量的書(shū)籍和文章介紹移植方法,嚴格按照其步驟進(jìn)行源代碼編寫(xiě)和修改就可以得到一份自己移植的操作系統。更簡(jiǎn)捷、可靠的辦法是從網(wǎng)站下載針對某一具體架構處理器的移植好的例程,大大方便了用戶(hù)的使用。關(guān)于移植μC/OS-II到ARM7的方法可參考文獻。
3.2 應用程序編寫(xiě)
要使用μC/OS-II嵌入式實(shí)時(shí)操作系統,編寫(xiě)應用程序必須遵守其編程規范。在本應用程序中,主要編寫(xiě)了串口中斷服務(wù)程序和串口數據的收發(fā)任務(wù),在任務(wù)間進(jìn)行數據交換時(shí),使用了互斥型信號量和二值信號量。
對于串口中斷服務(wù)程序的編寫(xiě),需要注意的問(wèn)題主要在于通信幀數據是否為固定長(cháng)度。在本應用程序中,串口1接收和發(fā)送的數據幀長(cháng)度固定且較短,其中斷服務(wù)程序和任務(wù)編程相對較簡(jiǎn)單;串口0和2接收到的數據幀是不定長(cháng)的且長(cháng)度較長(cháng),需要考慮數據幀長(cháng)度是否為觸發(fā)深度的整數倍。設置串口接收中斷觸發(fā)深度為14,當通信幀的長(cháng)度不是14的整數倍時(shí),對方將通信幀全部發(fā)送完畢后,最后一批數據必定不足14字節,從而導致超時(shí)中斷,就可以在超時(shí)中斷中發(fā)送信號量來(lái)通知接收任務(wù),成功地結束接收過(guò)程。
當通信幀的長(cháng)度正好為14的整數倍時(shí),對方將通信幀全部發(fā)送完畢后,最后一批數據必定是14字節,只能觸發(fā)正常的接收中斷,不會(huì )觸發(fā)超時(shí)中斷。在通信幀數據不定長(cháng)的情況下,不能通過(guò)正常的接收中斷來(lái)判斷接收過(guò)程是否結束。為此,在通信任務(wù)中應為等待信號量函數設置超時(shí)參數,當接收到的數據穩定不變時(shí)就可以結束接收過(guò)程。串口0中斷服務(wù)程序和接收數據任務(wù)程序片段代碼如下:


依據所要完成的任務(wù)并結合硬件系統框圖,將串口0和串口1接收到的數據存放在一個(gè)全局數組中,分別創(chuàng )建串口0和串口1接收任務(wù),兩個(gè)接收任務(wù)將接收到的數據直接寫(xiě)入全局數組的相應元素中。由于要求將串口0和串口1接收到的數據組幀以每秒一幀的速率發(fā)送出去,而串口0正好是每秒接收到一幀數據,或者說(shuō)與串口0相連接的普通性能GPS接收機每秒發(fā)送一幀數據,所以發(fā)送幀數據的組裝和寫(xiě)入隊列任務(wù)的啟動(dòng)可以由串口0接收任務(wù)中的信號量來(lái)控制,這樣可以避免因計時(shí)誤差而導致下傳的GPS幀數據跳變或重復。
由于需要將串口2接收到的高性能GPS接收機數據和串口0及串口1接收到的數據組幀后寫(xiě)入發(fā)送數據隊列,所以涉及到發(fā)送數據隊列資源的使用問(wèn)題,也就是共享資源的使用問(wèn)題。互斥信號量具有處理優(yōu)先級反轉的功能,特別適合對共享資源的互斥訪(fǎng)問(wèn),其優(yōu)先級繼承值必須高于所有需要訪(fǎng)問(wèn)這個(gè)共享資源的任務(wù)的優(yōu)先級。這里,串口2接收任務(wù)的優(yōu)先級為9,數據組幀任務(wù)的優(yōu)先級為13,所以設置互斥信號量的優(yōu)先級繼承值為8。當這兩個(gè)任務(wù)向數據隊列中寫(xiě)入數據時(shí),首先需要獲取互斥型信號量,待寫(xiě)完數據后應及時(shí)釋放信號量,以供其他任務(wù)使用該資源。
在主函數main()中,創(chuàng )建了串口3接收數據任務(wù),該任務(wù)的功能是創(chuàng )建其他任務(wù),并在無(wú)限循環(huán)中等待串口3接收數據,當串口3接收到數據后對其進(jìn)行判斷,并依據其內容執行相應的指令。其任務(wù)優(yōu)先級設為最高基于以下兩點(diǎn):該任務(wù)是關(guān)鍵任務(wù),當接收到指令時(shí)必須執行,不得遺漏;該任務(wù)執行的不是很頻繁,可以保障低任務(wù)優(yōu)先級的任務(wù)得到執行。其程序代碼如下:


數字通信相關(guān)文章:數字通信原理
通信相關(guān)文章:通信原理
評論