嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II串口通信的設(shè)計(jì)與實(shí)現(xiàn)
摘要:為解決實(shí)時(shí)操作系統(tǒng)μC/OS-II串口通信設(shè)計(jì)中信號(hào)量、消息郵箱使用方法的問(wèn)題,提出了一種以STM32V評(píng)估板為硬件平臺(tái)和μC/OS-Ⅱ的串口通信程序設(shè)計(jì)方案。該方案采用Cortex-M3架構(gòu)的ARM處理器STM32F103VB作為主控制芯片,ST3232作為串口通信電平轉(zhuǎn)換器。軟件設(shè)計(jì)部分描述了信號(hào)量、消息郵箱的應(yīng)用場(chǎng)合和基本操作方法,通過(guò)信號(hào)量和消息郵箱的配合使用保證任務(wù)間的數(shù)據(jù)傳輸?shù)耐叫?。給出了整個(gè)程序中的設(shè)計(jì)思路,程序開發(fā)使用STM32F103VB處理器自帶的固件庫(kù),減少了繁瑣的寄存器配置,降低了程序開發(fā)強(qiáng)度。實(shí)驗(yàn)驗(yàn)證了在2種不用通信速率下數(shù)據(jù)傳輸具有誤碼率低、傳輸穩(wěn)定可靠的特點(diǎn),并且若能夠配合相應(yīng)的數(shù)據(jù)校驗(yàn)算法就可將其應(yīng)用于工業(yè)現(xiàn)場(chǎng)的數(shù)據(jù)通信。
關(guān)鍵詞:實(shí)時(shí)操作系統(tǒng);μC/OS-II;信號(hào)量;消息郵箱;串口通信;STM32F103VB;ST3232
ARM是目前嵌入式領(lǐng)域中應(yīng)用最廣泛的RISC微處理器結(jié)構(gòu),以低成本、低功耗、高性能的特點(diǎn)占據(jù)了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的領(lǐng)先地位,已遍及工業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線系統(tǒng)等各類產(chǎn)品市場(chǎng)。STM32F103VB是基于ARM新內(nèi)核Cortex-M3的通用微處理器,STM32V評(píng)估板是基于該芯片的學(xué)習(xí)板并集成了仿真調(diào)試器(Ulink_Me),可以方便用戶快速學(xué)習(xí)和開發(fā)用戶程序。目前常見(jiàn)的嵌入式系統(tǒng)有:WinCE、Linux、pSoS、VxWorks和μC/OS-II等。μC/OS-Ⅱ是專門為嵌入式系統(tǒng)應(yīng)用設(shè)計(jì)的,具有源碼公開、實(shí)時(shí)性好、可移植裁剪、高效穩(wěn)定和教學(xué)科研免費(fèi)使用等特點(diǎn),已經(jīng)成功移植到8、16、32和64位等多種微處理器上,廣泛應(yīng)用于照相攝影、醫(yī)療器械、音響設(shè)備、工業(yè)機(jī)器人控制、發(fā)動(dòng)機(jī)控制、航空器、高速公路電話系統(tǒng)、自動(dòng)提款機(jī)等眾多領(lǐng)域。這里以STM32V評(píng)估板為硬件開發(fā)平臺(tái),結(jié)合μC/OS-II嵌入式操作系統(tǒng),設(shè)計(jì)了基于信號(hào)量、消息郵箱的串口通信應(yīng)用程序。
1 信號(hào)量、消息郵箱
μC/OS-II由事件(Event)驅(qū)動(dòng),一般事件包括信號(hào)量(Semaphores)、互斥信號(hào)量(Mutex semaphores)、消息郵箱(Message Mail boxes)、消息隊(duì)列(Message Query)、事件標(biāo)志組(Event Flag Group)等。其中信號(hào)量和消息郵箱作為一種常見(jiàn)的通信機(jī)制,在數(shù)據(jù)通信過(guò)程中應(yīng)用最為廣泛。
1.1 信號(hào)量(Semaphores)
μC/OS-II的信號(hào)量由2部分組成:一個(gè)是信號(hào)的計(jì)數(shù)值(0~65 535);另一個(gè)是由等待該信號(hào)量的任務(wù)組成的等待任務(wù)列表。信號(hào)量可用于以下場(chǎng)合:允許一個(gè)任務(wù)與其他任務(wù)或中斷同步;取得共享資源的使用權(quán)(滿足互斥條件);標(biāo)志事件的發(fā)生。
對(duì)信號(hào)量一般可以實(shí)施以下3種操作:初始化(INITIALIZE)信號(hào)量或者稱為創(chuàng)建信號(hào)量(CREATE);等待信號(hào)量(WAIT)或者稱為掛起信號(hào)量(PEND);發(fā)送信號(hào)量(POST)。
信號(hào)量在初始化過(guò)程中需要給信號(hào)量賦初值,等待信號(hào)量的任務(wù)表(WAWING LIST)應(yīng)清為空。信號(hào)量的使用需要調(diào)用相應(yīng)的函數(shù)并配置其相關(guān)的宏定義,具體如表1所示。
1.2 消息郵箱(Message Mail boxes)
消息郵箱能使任務(wù)或中斷服務(wù)向另外一個(gè)任務(wù)發(fā)送一個(gè)指針型的變量,這個(gè)指針指向一個(gè)包含指定“消息”的數(shù)據(jù)結(jié)構(gòu)。消息郵箱發(fā)送的不是消息本身,而是消息的地址指針。
消息郵箱可用于通知一個(gè)事件發(fā)生或作為二值信號(hào)量使用。消息郵箱的工作原理是郵箱在初始化時(shí)建立一個(gè)等待消息的任務(wù)列表,當(dāng)郵箱為空時(shí),等待消息的任務(wù)就掛起,并且被加入到等待消息的任務(wù)列表中。當(dāng)郵箱收到消息時(shí),等待任務(wù)列表中優(yōu)先級(jí)最高的任務(wù)或者最先等待消息的任務(wù)得到消息,且轉(zhuǎn)入就緒并從任務(wù)列表中清除。
對(duì)消息郵箱的操作一般有3種:郵箱初始化(INITIALIZE),或者稱為建立郵箱(CREATE);發(fā)送消息給郵箱(POST);等待消息進(jìn)入郵箱(PE-ND);無(wú)等待請(qǐng)求郵箱消息(ACCEFT)。
消息郵箱的使用需要調(diào)用相應(yīng)的函數(shù)并配置其相關(guān)的宏定義,具體如表2所示。
評(píng)論