祁莉娜,徐良平,邵文軍
(1.武漢郵電科學(xué)研究院,湖北 武漢 430074;2.武漢虹信通信技術(shù)有限責(zé)任公司,湖北 武漢 430074;3.華中科技大學(xué),湖北 武漢 430074)
嵌入式系統(tǒng)中通常采用串口實(shí)現(xiàn)微控制器與外部設(shè)備之間的通信,但在一些應(yīng)用場合往往有多個(gè)外部設(shè)備與微控制器通過串口通信,而一般的嵌入式微控制器只有一到兩個(gè)串口,不能滿足要求,這就需要對串口進(jìn)行擴(kuò)展[1-2]。比如車載無線視頻服務(wù)器中的主芯片DM365微控制器自帶兩個(gè)串口,但是它需要通過串口控制云臺,同時(shí)接收來自GPS模塊的數(shù)據(jù)、紅外遙控器的控制命令以及網(wǎng)絡(luò)鍵盤的云臺控制命令等。
本文設(shè)計(jì)一種應(yīng)用于車載無線視頻服務(wù)器的串口擴(kuò)展嵌入式系統(tǒng),它采用實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ,串口擴(kuò)展芯片是 TI公司的基于 Cortex-M3內(nèi)核的微控制器LM3S1538,通過LM3S1538來擴(kuò)展車載無線視頻服務(wù)器的主芯片DM365的串口。
Cortex-M3是一種ARMv7架構(gòu)32位處理器內(nèi)核,擁有比普通單片機(jī)更高的性能和更豐富的功能、比一般的ARM32系統(tǒng)更低的功耗和成本[3]。它采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線,數(shù)據(jù)訪問不會占用指令總線,這樣一來就可以同時(shí)進(jìn)行取指和數(shù)據(jù)訪問,處理器能夠并行執(zhí)行多個(gè)操作,大大提高了程序的執(zhí)行效率。Cortex-M3內(nèi)核流水線是一種分支預(yù)測的流水線,這種設(shè)計(jì)提高了指令執(zhí)行的速度。此外,Cortex-M3內(nèi)核中嵌入了Thumb-2指令集,避免了早期的處理器中由于16位Thumb狀態(tài)與ARM狀態(tài)的相互切換導(dǎo)致的性能下降,在保留代碼的緊湊性的同時(shí)提高了系統(tǒng)的性能。Cortex-M3的另一優(yōu)點(diǎn)是它有一個(gè)嵌套向量中斷控制器 (Nested Vectored Interrupt Controller,NVIC),采用末尾連鎖技術(shù),提供準(zhǔn)確快速的中斷處理。最后值得一提的是Cortex-M3多種多樣的調(diào)試組建支持方便的調(diào)試功能。
μC/OS-Ⅱ是在μCOS基礎(chǔ)上經(jīng)過10年的修改和發(fā)展而來的,相比μC/OS,μC/OS-Ⅱ提出了更多的功能。μC/OS-Ⅱ是一種開放源碼、可裁剪的基于優(yōu)先級可剝奪實(shí)時(shí)內(nèi)核,它有很強(qiáng)的可移植性,目前已被移植到40余種不同體系架構(gòu)的處理器上。μC/OS-Ⅱ起初就是為微控制器系統(tǒng)設(shè)計(jì)的,它的結(jié)構(gòu)小巧,僅包含了基本的任務(wù)調(diào)度與管理、內(nèi)存管理以及任務(wù)間的通信與同步機(jī)制,又由于是可裁剪的,在應(yīng)用系統(tǒng)中核心部分的代碼最少只有2.7 kbyte,因此,μC/OS-Ⅱ?qū)τ谝恍┬⌒偷那度胧较到y(tǒng)來說十分合適。
木犀草素·4,4′-聯(lián)吡啶藥物共晶對小鼠巨噬細(xì)胞RAW264.7的抗炎作用研究 ……………………………… 劉立新等(5):602
創(chuàng)建串口通信消息隊(duì)列,實(shí)現(xiàn)串口數(shù)據(jù)接收線程和GPS數(shù)據(jù)處理線程、紅外數(shù)據(jù)處理線程、網(wǎng)絡(luò)鍵盤數(shù)據(jù)處理線程的通信。串口數(shù)據(jù)接收線程接收到來自串口的數(shù)據(jù),根據(jù)數(shù)據(jù)幀頭判斷數(shù)據(jù)類型,調(diào)用消息發(fā)送函數(shù)MsgQueueSend(),此函數(shù)將數(shù)據(jù)和數(shù)據(jù)類型一起作為消息體發(fā)送給消息隊(duì)列。GPS數(shù)據(jù)處理線程循環(huán)調(diào)用GPSMsgRecieve()函數(shù)從消息隊(duì)列讀取消息,若消息隊(duì)列不為空,并且隊(duì)首節(jié)點(diǎn)是GPS數(shù)據(jù),則讀取數(shù)據(jù),隊(duì)首計(jì)數(shù)器加1,若不是GPS數(shù)據(jù)則跳出本次循環(huán)。同樣,紅外數(shù)據(jù)處理線程調(diào)用IRMsgRecieve()函數(shù)接收紅外數(shù)據(jù),網(wǎng)絡(luò)鍵盤數(shù)據(jù)處理線程調(diào)用NKBMsgRecieve()函數(shù)接收網(wǎng)絡(luò)鍵盤數(shù)據(jù)。
4.2.1 μC/OS-Ⅱ操作系統(tǒng)在LM3S1538上的移植
圖1 系統(tǒng)硬件框圖
陳律師說:“沒關(guān)系,你盡管問。我覺得她完全沒有機(jī)會知道這件事,關(guān)于這一點(diǎn)我已經(jīng)反復(fù)回憶過。我不可能告訴她;我們談?wù)撨@件事的時(shí)候有意打發(fā)她出去買東西了,她不在家;我打好文件去找羅素青簽字的時(shí)候也故意回避了她,當(dāng)時(shí)我們沒有交談,我把簽好字的文件直接放進(jìn)了包里。”
圖2 數(shù)據(jù)幀8結(jié)構(gòu)
在顏值這件事上,上帝給了每個(gè)人一個(gè)區(qū)間。楊紫向上,變美,掙扎著將自己從容貌的困境中拽出來,努力地走到區(qū)間的最大值,要的是一個(gè)自信昂揚(yáng)的自己,以及越來越寬敞的演藝之路。
DM365上的操作系統(tǒng)是Linux嵌入式實(shí)時(shí)操作系統(tǒng),利用Linux線程間通信的同步和互斥機(jī)制模擬消息隊(duì)列。相應(yīng)程序段為:
尖錐狀納米線的生長是軸向生長和徑向生長并存的過程,溫度對這兩種生長起到了重要的作用,當(dāng)溫度較低時(shí),軸向生長占主導(dǎo)地位,適當(dāng)?shù)奶嵘L溫度可以改善納米線形貌質(zhì)量;而當(dāng)溫度過高時(shí),如A6樣品中納米線的直徑要明顯加粗,表明了徑向生長速度的加快,導(dǎo)致納米線形貌變差。從實(shí)驗(yàn)結(jié)果中可以看出,生長溫度為750℃時(shí)得到的納米線表面形貌較好。
LM3S1538有 3個(gè)串口:UART0,UART1和 UART2。LM3S1538與主芯片DM365通過UART0通信;與GPS模塊通過UART1通信;與紅外模塊通過配置成串口的GPIO通信。DM365的云臺控制信息通過UART2經(jīng)RS-485轉(zhuǎn)換電路發(fā)送給云臺,網(wǎng)絡(luò)鍵盤通過I2C轉(zhuǎn)串口芯片SC16IS752實(shí)現(xiàn)和LM3S1538的通信。其硬件框圖如圖1所示。
車載無線視頻服務(wù)器對主芯片DM365的串口UART1進(jìn)行擴(kuò)展,接收LM3S1538從設(shè)備上讀取的GPS數(shù)據(jù)、紅外數(shù)據(jù)、網(wǎng)絡(luò)鍵盤數(shù)據(jù),發(fā)送云臺控制數(shù)據(jù)到LM3S1538,LM3S1538經(jīng)串口將控制命令發(fā)送給RS-485轉(zhuǎn)換電路,實(shí)現(xiàn)對云臺的操作。設(shè)計(jì)串口通信模塊軟件,完成數(shù)據(jù)的接收處理和發(fā)送。
μC/OS-Ⅱ在不同的處理器上的移植主要工作就是修改3 個(gè)文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM[4-5]。
OS_CPU.H文件中對和編譯器有關(guān)的數(shù)據(jù)類型進(jìn)行重新定義,對和處理器相關(guān)的臨界代碼段訪問處理、任務(wù)切換以及處理器堆棧增長方向宏定義[6]。數(shù)據(jù)類型定義是通過查找編譯器手冊,找到μCOS-Ⅱ中對應(yīng)的標(biāo)準(zhǔn)C數(shù)據(jù)類型進(jìn)行重新定義。為了防止臨界代碼段被多任務(wù)或中斷服務(wù)例程破壞,μCOS-Ⅱ需要在訪問臨界代碼段之前先關(guān)閉中斷,訪問完后再打開中斷。臨界段處理方法的宏定義為:
定義DM365與LM3S1538之間進(jìn)行串口通信的協(xié)議,上位機(jī)的數(shù)據(jù)按此協(xié)議組幀,幀結(jié)構(gòu)如圖2所示,通過串口發(fā)送到下位機(jī),并從串口接收來自下位機(jī)的數(shù)據(jù)幀,做數(shù)據(jù)幀解析。下位機(jī)完成類似的數(shù)據(jù)發(fā)送接收工作。系統(tǒng)的軟件設(shè)計(jì)包括上位機(jī)軟件設(shè)計(jì)和下位機(jī)軟件設(shè)計(jì)兩部分,下位機(jī)軟件設(shè)計(jì)又包含了將μC/OS-Ⅱ操作系統(tǒng)在LM3S1538微控制器上的移植以及應(yīng)用程序的設(shè)計(jì)。
臭氧具有非常強(qiáng)的氧化能力,對于工業(yè)廢水中的生物難降解物質(zhì)的處理具有處理效果好、降解速度快、占地面積小、無二次污染、自動化程度高等優(yōu)點(diǎn),因此,臭氧氧化法及其聯(lián)合技術(shù)廣泛應(yīng)用于工業(yè)廢水處理中[1]。
說是機(jī)遇,是因?yàn)檎麄€(gè)行業(yè)高端化轉(zhuǎn)型的提速,推動了市場準(zhǔn)入門檻的大幅提升,一些低端產(chǎn)品、山寨品牌被快速淘汰,而它們空出來的市場份額,則成為了有實(shí)力的龍頭企業(yè)新的市場增長空間。同時(shí),急速變革的市場,也刺激消費(fèi)需求的多元化、理性化,賦予了市場更大的增長潛力和想象空間,廚電企業(yè)擁有了更廣闊的發(fā)展平臺。長遠(yuǎn)來看,步入調(diào)整期的廚電市場,為行業(yè)巨頭的誕生提供了更多的契機(jī)。
Cortex-M3核的MCU堆棧增長方向是從高向低,宏定義如下:
OS_TASK_SW()是系統(tǒng)從低優(yōu)先級任務(wù)切換到高優(yōu)先級任務(wù)時(shí)調(diào)用的,它是一個(gè)宏,定義如下:
對于處理器執(zhí)行開關(guān)中斷的操作做兩個(gè)宏定義:
OS_CPU_C.C文件中編寫10個(gè)C函數(shù),其中9個(gè)函數(shù)不是必需的,因此只作聲明。唯一必需的函數(shù)是OSTaskStkInit(),它被 OSTaskCreate()和 OSTaskCreateExt()函數(shù)調(diào)用,在任務(wù)創(chuàng)建的時(shí)候完成任務(wù)堆棧結(jié)構(gòu)的初始化,將寄存器的值保存到堆棧,使堆棧看起來就像剛發(fā)生過中斷一樣。
OS_CPU_A.ASM文件中需要編寫5個(gè)匯編函數(shù):OS_CPU_SR_Save(),OS_CPU_SR_Restore(),OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()。其中 OS_CPU_SR_Save(),OS_CPU_SR_Restore()兩個(gè)函數(shù)是通過保存中斷狀態(tài)的方式禁止/打開中斷的。OSStartHighRdy()函數(shù)利用任務(wù)切換執(zhí)行一條中斷返回指令來開始第一個(gè)任務(wù)的調(diào)度,但是基于Cortex-M3核的處理器在執(zhí)行中斷返回指令時(shí)必須處于處理模式,而一般情況下系統(tǒng)處于線程模式,因此在OSStartHighRdy()中要進(jìn)行模式轉(zhuǎn)換,進(jìn)入處理模式。OSCtxSw()函數(shù)實(shí)現(xiàn)任務(wù)級的切換,而OSIntCtxSw()是從中斷服務(wù)例程中執(zhí)行切換。
4.2.2 應(yīng)用程序設(shè)計(jì)
LM3S1538接收來自GPS模塊、紅外模塊、網(wǎng)絡(luò)鍵盤的數(shù)據(jù),對數(shù)據(jù)組幀后通過串口UART0發(fā)送給DM365,同時(shí)LM3S1538檢測串口UART0來自DM365的云臺控制數(shù)據(jù)。在主任務(wù)中創(chuàng)建兩個(gè)任務(wù),GPSTask和NKBTask,他們通過消息隊(duì)列和主任務(wù)通信。在主任務(wù)中為GPS任務(wù)創(chuàng)建一個(gè)郵箱,接收到GPS數(shù)據(jù)后在中斷服務(wù)程序中向郵箱發(fā)消息,GPS任務(wù)收到消息后從相應(yīng)端口讀取GPS數(shù)據(jù),組幀后發(fā)送給主任務(wù)的消息隊(duì)列;為NKB任務(wù)創(chuàng)建一個(gè)消息隊(duì)列,接收到網(wǎng)絡(luò)鍵盤數(shù)據(jù)的時(shí)候在中斷服務(wù)程序中向該消息隊(duì)列發(fā)送消息,網(wǎng)絡(luò)鍵盤線程收到消息后從相應(yīng)端口讀取網(wǎng)絡(luò)鍵盤數(shù)據(jù)發(fā)送給主任務(wù)的消息隊(duì)列。在接收到紅外數(shù)據(jù)后直接在中斷服務(wù)程序中向主任務(wù)的消息隊(duì)列發(fā)送數(shù)據(jù)。主任務(wù)收到消息后通過UART0向DM365發(fā)送該幀數(shù)據(jù)。
在主程序中完成LM3S1538外圍電路的初始化、μC/OS-II的初始化以及創(chuàng)建主任務(wù):
在DevInit()中包括對LM3S1538時(shí)鐘頻率設(shè)置、GPIO的初始化以及中斷使能和中斷的優(yōu)先級設(shè)置。
童話樹:“我不服,我要放出我的撒手锏了!當(dāng)當(dāng)當(dāng)當(dāng)!這可是我小時(shí)候不同時(shí)期的照片,你們可以看一看,能看得到我的正臉嗎?能看到算我輸。不知道為什么,我小時(shí)候一拍照就愛扮鬼臉,好好一小姑娘,不是扯嘴巴,就是動作幅度大,極度夸張,我感覺我小時(shí)候是個(gè)戲精,啊啊??!我應(yīng)該去當(dāng)個(gè)演員。”
1)主任務(wù)入口函數(shù)
2)子任務(wù)入口函數(shù)(以GPSTaskFn為例)如:
3)中斷服務(wù)子程序(以UART1為例)如:
1.3.1 樣品測試分析 土壤養(yǎng)分中有機(jī)質(zhì)(Organic Matter,OM)、全氮(Total Nitrogen,TN)、有效磷(Available Phosphorus,AP)、速效鉀(Rapidly Available Potassium,RAK)含量及pH分別采用油浴加熱重鉻酸鉀氧化容量法、凱氏蒸餾法、碳酸氫鈉浸提-鉬銻抗比色法、乙酸銨浸提-火焰光度計(jì)法和電位法(土液比=1∶2.5)測定。
基于Cortex-M3的串口擴(kuò)展模塊和車載無線視頻服務(wù)器核心板之間可以成功進(jìn)行串口通信,Cortex-M3能夠?qū)⒉杉降腉PS數(shù)據(jù)、紅外遙控?cái)?shù)據(jù)和網(wǎng)絡(luò)鍵盤數(shù)據(jù)轉(zhuǎn)發(fā)給DM365,圖3是通過客戶端看到的疊加了GPS信息的視頻,圖中右下角是對云臺進(jìn)行控制的按鈕,點(diǎn)擊每個(gè)按鈕則平臺下發(fā)相應(yīng)命令到設(shè)備的DM365,DM365通過擴(kuò)展串口發(fā)送數(shù)據(jù)到Cortex-M3,Cortex-M3控制相應(yīng)芯片使云臺能夠完成轉(zhuǎn)動、變焦等動作。圖4所示是用紅外遙控器進(jìn)行本地配置的界面,圖4中左上角的按鈕正被選中,此時(shí)按下遙控器的確認(rèn)按鈕即可進(jìn)行相關(guān)參數(shù)的設(shè)置。對云臺的操作,本地配置可同時(shí)進(jìn)行,同時(shí)GPS數(shù)據(jù)也正常收發(fā),彼此之間沒有影響。
本文采用TI基于Cortex-M3核的MCU LM3S1538擴(kuò)展了DM365的串口,成功將μC/OS-Ⅱ移植到LM3S1538上,完成了軟硬件的設(shè)計(jì),本設(shè)計(jì)能夠應(yīng)用于車載無線視頻服務(wù)器,實(shí)現(xiàn)設(shè)備的紅外模塊、網(wǎng)絡(luò)鍵盤模塊、GPS模塊以及云臺通過擴(kuò)展的串口與核心板進(jìn)行通信。此設(shè)計(jì)的優(yōu)點(diǎn)是低成本、低功耗、硬件電路簡單,具有較好的使用價(jià)值。
[1]孟濤,王福虎,陳森.微控制器的多串口擴(kuò)展設(shè)計(jì)[J].艦船防化,2009,(5):45-51.
[2]范開喜,王慶,于先文.嵌入式組合導(dǎo)航系統(tǒng)中多路異步串口系統(tǒng)的設(shè)計(jì)[J]. 測控技術(shù),2010,29(8):39-42.
[3]YIU J.ARM Cortex-M3權(quán)威指南[M].宋巖,譯.北京:北京航空航天大學(xué)出版社,2009.
[4]LABROSSE J J.μC/OS-II―源碼公開的實(shí)時(shí)嵌入式操作系統(tǒng)[M].邵貝貝,譯.北京:中國電力出版社,2001.
[5]佟彤.μC/OS-Ⅱ嵌入式操作系統(tǒng)的研究及其在轉(zhuǎn)臺控制中的應(yīng)用[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.
[6]孫順遠(yuǎn),秦會斌,崔佳冬,等.μCOSⅡ在CortexM3內(nèi)核上的移植及優(yōu)化[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(4):208-211.