當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]摘要:介紹了實時操作系統(tǒng)μC/OS-II的特點和內(nèi)核結(jié)構(gòu),并首次實現(xiàn)了μC/OS-II在摩托羅拉處理器MPC555上的移植,介紹了移植后OS的應(yīng)用方法。 關(guān)鍵詞:μC/OS-II MPC5

摘要:介紹了實時操作系統(tǒng)μC/OS-II的特點和內(nèi)核結(jié)構(gòu),并首次實現(xiàn)了μC/OS-II在摩托羅拉處理器MPC555上的移植,介紹了移植后OS的應(yīng)用方法。 關(guān)鍵詞:μC/OS-II MPC555 嵌入式操作系統(tǒng) 移植 μC/OS-II是一種占先式、多任務(wù)、移植性非常強的免費微控制器嵌入式實時操作系統(tǒng),從1992年出現(xiàn)以來,已在照相機、發(fā)動機控制和工業(yè)機器人等多種領(lǐng)域中得到應(yīng)用。它一方面相對GNU下Linux衍生出來的EOS更小巧且移植方便,實時性更好,更適合工業(yè)控制領(lǐng)域應(yīng)用;另一方面由于是免費的,比使用VxWorks等商業(yè)實時EOS大大節(jié)省成本,非常適用于開發(fā)實用簡約的嵌入式控制程序。 摩托羅拉的MPC555是建立在PowerPC體系結(jié)構(gòu)上,采用RISC技術(shù)的一款高檔、適用于精密控制的微控制器。其芯片內(nèi)嵌增加了浮點單元的32位RCPU核心、26KB靜態(tài)RAM、448KB片內(nèi)Flash、一個QSMCM(串行通訊模塊)、兩個TouCAN模塊、兩個TPU、一個MIOS(模塊化I/O系統(tǒng))、兩個QADC模塊,工作頻率達40MHz。另外芯片體積小,僅為2.5cm%26;#215;2.5cm%26;#215;0.5cm。所有這些特性使其特別適用于汽車等現(xiàn)場控制領(lǐng)域的嵌入式微控制系統(tǒng)。 將μC/OS-II移植于MPC555上既有益于MPC和μC/OS-II在車用控制器上的應(yīng)用,其成果也可以用于其他嵌入式工業(yè)控制領(lǐng)域。本次移植中,使用CodeWarrior for PPC 6.5編譯調(diào)試環(huán)境。

1 移植原理 μC/OS-II包括中斷管理、任務(wù)管理、時間管理、任務(wù)之間通信管理和內(nèi)存管理五方面功能。其結(jié)構(gòu)共分三層,如圖1。I層為與處理器相關(guān)的代碼,在 μC/OS-II的Intel 80x86版本上為OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM三個文件。該層完成系統(tǒng)時鐘的設(shè)置、出入中斷的管理和任務(wù)切換功能,為第II層提供接口。II層包括時間管理、任務(wù)調(diào)度管理、任務(wù)間的通信管理和內(nèi)存管理四部分,是OS的主體部分,全部由ANSI C代碼寫成,與處理器無關(guān),它為用戶應(yīng)用程序提供接口。III層是用戶應(yīng)用程序部分,μC/OS-II有中斷和任務(wù)兩個處理級別,用戶可以建立自己的任務(wù),編寫必要的中斷子程,在任務(wù)之間或任務(wù)與中斷子程之間建立信號量、郵箱或消息隊列完成控制器軟件的編寫。根據(jù)以上結(jié)構(gòu)特點,在移植過程中,只需將I層代碼針對MPC555的編程結(jié)構(gòu)做相應(yīng)改動,使其完成系統(tǒng)時鐘設(shè)置、中斷管理和任務(wù)切換功能即可。 在前后臺系統(tǒng)中,提供一個CPU堆棧。發(fā)生中斷時,將當前使用到的寄存器壓入堆棧,保存現(xiàn)場,執(zhí)行中斷程序;中斷程序完成后,從CPU堆棧中彈出寄存器的值,恢復(fù)現(xiàn)場。 在多任務(wù)系統(tǒng)μC/OS-II中不是這樣。OS創(chuàng)建時,為每個任務(wù)建立并初始化一個堆棧。當發(fā)生中斷或任務(wù)切換時,把當前任務(wù)運行現(xiàn)場保存起來,即將所有寄存器保存到該“舊”任務(wù)的堆棧中。當某個任務(wù)需要從就緒狀態(tài)激活到運行狀態(tài)時,OS又需將所有寄存器從該“新”任務(wù)的堆棧中彈出。這樣,每個任務(wù)分時占用CPU。而對各任務(wù)來說,每次進入運行態(tài)時,CPU狀態(tài)都與上次從運行態(tài)退出時完全一樣。所以不再是使用一個CPU堆棧,而是多個任務(wù)將各自的運行現(xiàn)場保存到自己的堆棧中。 圖2 MPC555下uC/OS-II的中斷處理流程圖 另外,調(diào)用C函數(shù)時也會使用到堆棧,此時編譯器會創(chuàng)建一個堆棧;在C函數(shù)返回時,將其釋放。其大小因C函數(shù)使用到的變量和編譯器的不同而不同。在移植時,能夠正確創(chuàng)建、初始化、保存并恢復(fù)各個任務(wù)的堆棧,是確保OS任務(wù)切換和中斷管理順利完成的關(guān)鍵。 MPC555有32個32bit通用定點數(shù)寄存器,32個64bit浮點數(shù)寄存器,另有9個控制/狀態(tài)寄存器。針對MPC555的編程結(jié)構(gòu),設(shè)計如表1的堆棧結(jié)構(gòu)。每次任務(wù)環(huán)境入棧時創(chuàng)建一含73個位置的堆棧,為了保證浮點數(shù)寄存器的完整,每個位置為64bit寬。創(chuàng)建任務(wù)時,建立該堆棧結(jié)構(gòu),并用默認值對其進行初始化。在任務(wù)保存或激活時把寄存器的值保存到堆棧中相應(yīng)位置,或者從堆棧的相應(yīng)位置把寄存器值彈出。其中GPR1被MPC作為堆棧指針SP使用,在堆棧操作時,要注意控制好SP。 表1 堆棧結(jié)構(gòu)表 SP Offset Register Saved NUM Default Value 584~336 328 320~80 72 64 56 48 40 32 24 16 8 0 FP31~FP0 FPSCR GPR31~GPR0 DAR CTX LR XER CR SRR1 SRR0 MSR SP(GPR1) 73~42 41 40~10 9 8 7 6 5 4 3 2 1 0 0.0 0x000020FC0000 0x0 0x00 0x00 task*0x100000000[1] 0x00 0x00 0x0000B00200000000 task*0x100000000[1] 0x0000B00200000000 0 注:堆棧所屬任務(wù)代碼入口地址 2 中斷管理 首先,分析一下MPC555的中斷結(jié)構(gòu)。在MPC中有新的概念——異常(Exception)。它包含所有CPU非正常事件的出現(xiàn),包括中斷、總線錯誤、指令錯誤、系統(tǒng)調(diào)用異常、實時中斷異常和復(fù)位等。MPC為異常提供了異常向量表。該表為每個異常提供一個256字節(jié)的異常處理代碼空間。 所有外部中斷和I/O子模塊產(chǎn)生的中斷共同作為異常的一種,占用異常向量表中的一個位置。在該異常處理程序中,軟件需根據(jù)中斷狀態(tài)寄存器的值判斷到底發(fā)生了哪個中斷并進行相應(yīng)處理。 在每次發(fā)生異常時,MPC自動將主狀態(tài)寄存器MSR保存到SRR1中,將程序指針PC保存到SRR0中;然后PC指針指向該異常在異常向量表中的起始位置,進入異常處理程序。每次異常返回時,調(diào)用rfi指令,系統(tǒng)自動將SRR1中的值返回MSR中,將SRR0中的值返回PC中,即程序從SRR0指向的位置繼續(xù)執(zhí)行。在發(fā)生異常和異常返回之間,不自動允許新的異常和中斷。所以,程序需要在保存SRR0和SRR1后允許異常,在適當?shù)臅r候允許中斷。

μC/OS-II的異常處理過程中,用戶及OS與硬件無關(guān)的代碼完成圖2中①、②、③、④、⑤這五個步驟。依次完成以下任務(wù):①給OSIntNesting加1或調(diào)用OSIntEnter(),通知OS,系統(tǒng)已進入中斷;②分析中斷源調(diào)用相應(yīng)中斷處理子程;③在該中斷處理子程中完成清中斷源;④進行其他中斷處理;⑤調(diào)用OSIntExit()判斷是否有更高優(yōu)先級的任務(wù)被激活而需要進行任務(wù)調(diào)度,若不需要,則直接從中斷返回;若需要,則調(diào)用OSIntCtxSw()完成中斷級任務(wù)調(diào)度。 移植中,為了在MPC555上實現(xiàn)上述中斷處理過程,需編寫與硬件相關(guān)代碼,為以上思路提供三個接口函數(shù):進入中斷、退出中斷和中斷級任務(wù)調(diào)度。根據(jù)MPC555的編程結(jié)構(gòu),設(shè)計的完整中斷程序流程如圖2。虛框Ⅰ部分寫在異常向量表中每個異常的處理代碼空間中,依次調(diào)用Prologue()、Exception-Routine()和Epilogue()三個函數(shù)。 其中,Exception-Routine()函數(shù)為①到⑤步中斷處理子程提供調(diào)用接口。 虛框Ⅱ中為與硬件相關(guān)的函數(shù)Prologue(),它將發(fā)生中斷時所有寄存器保存到當前任務(wù)的堆棧中,并處理CPU狀態(tài)。是OS進入中斷的接口函數(shù)。 虛框Ⅲ中為與硬件相關(guān)的函數(shù)Epilogue(),它從當前任務(wù)(可能是中斷發(fā)生時的任務(wù),也可能是新的被激活的任務(wù))堆棧中恢復(fù)所有CPU寄存器,并從中斷返回,是OS退出中斷的接口函數(shù)。 虛框Ⅳ中為與硬件和編譯器相關(guān)的函數(shù)OSIntCtxSw()。它將新的高優(yōu)先級就緒態(tài)任務(wù)調(diào)整為當前任務(wù),完成中斷級任務(wù)調(diào)度,隨后調(diào)用Epilogue()退出中斷,進入新的被激活的任務(wù)。應(yīng)注意,在中斷級任務(wù)調(diào)度過程中,①、⑤兩處C函數(shù)被調(diào)用后不需要返回,所以需要將堆棧指針SP向下做適當調(diào)整,以丟棄這兩個函數(shù)調(diào)用時編譯器產(chǎn)生的堆棧。C函數(shù)調(diào)用時,產(chǎn)生堆棧的大小與編譯器相關(guān),因此應(yīng)根據(jù)編譯器產(chǎn)生的代碼決定此處丟棄堆棧的大小。為保證異常時需要丟棄的堆棧大小不變,可使用圖2中的方法,在異常處理時另外調(diào)用函數(shù)完成步驟③、④,以確保不同異常處理過程中,①、⑤兩處C函數(shù)被調(diào)用時,編譯器建立的堆棧大小一致。 3 任務(wù)切換 μC/OS-II中的任務(wù)調(diào)度由函數(shù)OSSched()完成。在Intel 80x86系統(tǒng)上,OSSched?穴?雪在獲得當前新的最高優(yōu)先級的任務(wù)指針后,調(diào)用CPU軟中斷完成任務(wù)切換。

在MPC555上,可以用系統(tǒng)調(diào)用異常處理程序“System Call Exception”代替軟中斷。該異常處理程序如圖3所示,完成以下三個步驟:①在prologue()中將當前任務(wù)運行環(huán)境保存到當前任務(wù)的堆棧中;②調(diào)用任務(wù)級調(diào)度函數(shù)OSCtxSw(),將新的高優(yōu)先級就緒態(tài)任務(wù)調(diào)整為當前任務(wù);③從新任務(wù)堆棧中彈出所有寄存器的值,恢復(fù)中斷,完成任務(wù)切換。其中①、③兩部分代碼與中斷管理程序相同,不需要重新編寫,只需編寫函數(shù)OSCtxSw()完成任務(wù)指針的切換工作。 任務(wù)切換過程不可以被打斷,所以,上述過程中始終不能打開中斷。 4 時鐘管理 μC/OS-II需要在系統(tǒng)初始化后,開始一個系統(tǒng)時鐘節(jié)拍,它是OS系統(tǒng)的時間基準。該時鐘節(jié)拍一般由時間中斷產(chǎn)生。MPC555中可產(chǎn)生時間節(jié)拍的模塊有很多,本次移植選用DEC異常。因為它與外部中斷使用不同的異常向量,便于對異常事件的管理,有利于提高OS的穩(wěn)定性。 DEC時鐘同步于TMBCLK,其頻率可選,本次移植設(shè)置為2.5MHz。代碼在時鐘初始化和每次進入DEC異常時,將DEC計數(shù)器設(shè)置為2.5M/OS_ TICKS_PER_SEC,這樣,可使OS每秒種產(chǎn)生OS_TICKS_PER_SEC個時鐘節(jié)拍。 5 應(yīng)用方法 在使用移植后的OS時,用戶需要編寫自己的主程序main(),其流程如圖4。在適當?shù)某跏蓟蠹纯蓡覱S。 另外,用戶需在TaskStart任務(wù)中啟動時鐘節(jié)拍,調(diào)用OSStatInit()函數(shù)初始化統(tǒng)計任務(wù),創(chuàng)建所需的其他任務(wù),最后調(diào)用OSTaskDel()函數(shù)刪除TaskStart任務(wù)自己。OS在該函數(shù)調(diào)用結(jié)束后,會自動允許異常和中斷,OS正常運轉(zhuǎn),不斷調(diào)度任務(wù),響應(yīng)中斷。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉