www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

μc/OS-II是一種占先式、多任務(wù)、移植性非常強(qiáng)的免費(fèi)微控制器嵌入式實(shí)時(shí)操作系統(tǒng),從1992年出現(xiàn)以來(lái),已在照相機(jī)、發(fā)動(dòng)機(jī)控制和工業(yè)機(jī)器人等多種領(lǐng)域中得到應(yīng)用。它一方面相對(duì)GNU下Linux衍生出來(lái)的EOS更小巧且移植方便,實(shí)時(shí)性更好,更適合工業(yè)控制領(lǐng)域應(yīng)用;另一方面由于是免費(fèi)的,比使用VxWorks等商業(yè)實(shí)時(shí)EOS大大節(jié)省成本,非常適用于開(kāi)發(fā)實(shí)用簡(jiǎn)約的嵌入式控制程序。

摩托羅拉的MPC555是建立在PowerPC體系結(jié)構(gòu)上,采用RISC技術(shù)的一款高檔、適用于精密控制的微控制器、其芯片內(nèi)嵌增加了浮點(diǎn)單元的32位RCPU核心、26KB靜態(tài)RAM、448KB片內(nèi)Flash、一個(gè)QSMCM(串行通訊模塊)、兩個(gè)TouCAN模塊、兩個(gè)TPU、一個(gè)MIOS(模塊化I/O系統(tǒng))、兩個(gè)QADC模塊,工作頻率達(dá)40MHz。另外芯片體積小,僅為2.5cm×2.5cm×0.5cm。所有這些特性使其特別適用于汽車(chē)等現(xiàn)場(chǎng)控制領(lǐng)域的嵌入式微控制系統(tǒng)?
將μC/OS-II移植于MPC555上既有益于MPC和μC/OS-II在車(chē)用控制器上的應(yīng)用,其成果也可以用于其他嵌入式工業(yè)控制領(lǐng)域。本次移植中,使用CodeWarrior for PPC 6.5編譯調(diào)試環(huán)境。

1 移植原理

μC/OS-II包括中斷管理、任務(wù)管理、時(shí)間管理、任務(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三個(gè)文件。該層完成系統(tǒng)時(shí)鐘的設(shè)置、出入中斷的管理和任務(wù)切換功能,為第II層提供接口。II層包括時(shí)間管理、任務(wù)調(diào)度管理、任務(wù)間的通信管理和內(nèi)存管理四部分,是OS的主體部分,全部由ANSI C代碼寫(xiě)成,與處理器無(wú)關(guān),它為用戶(hù)應(yīng)用程序提供接口。III層是用戶(hù)應(yīng)用程序部分,μC/OS-II有中斷和任務(wù)兩個(gè)處理級(jí)別,用戶(hù)可以建立自己的任務(wù),編寫(xiě)必要的中斷子程,在任務(wù)之間或任務(wù)與中斷子程之間建立信號(hào)量、郵箱或消息隊(duì)列完成控制器軟件的編寫(xiě)。根據(jù)以上結(jié)構(gòu)特點(diǎn),在移植過(guò)程中,只需將I層代碼針對(duì)MPC555的編程結(jié)構(gòu)做相應(yīng)改動(dòng),使其完成系統(tǒng)時(shí)鐘設(shè)置、中斷管理和任務(wù)切換功能即可。

在前后臺(tái)系統(tǒng)中,提供一個(gè)CPU堆棧?發(fā)生中斷時(shí),將當(dāng)前使用到的寄存器壓入堆棧,保存現(xiàn)場(chǎng),執(zhí)行中斷程序;中斷程序完成后,從CPU堆棧中彈出寄存器的值,恢復(fù)現(xiàn)場(chǎng)。

在多任務(wù)系統(tǒng)μC/OS-II中不是這樣。OS創(chuàng)建時(shí),為每個(gè)任務(wù)建立并初始化一個(gè)堆棧。當(dāng)發(fā)生中斷或任務(wù)切換時(shí),把當(dāng)前任務(wù)運(yùn)行現(xiàn)場(chǎng)保存起來(lái),即將所有寄存器保存到該“舊”任務(wù)的堆棧中。當(dāng)某個(gè)任務(wù)需要從就緒狀態(tài)激活到運(yùn)行狀態(tài)時(shí),OS又需將所有寄存器從該“新”任務(wù)的堆棧中彈出。這樣,每個(gè)任務(wù)分時(shí)占用CPU。而對(duì)各任務(wù)來(lái)說(shuō),每次進(jìn)入運(yùn)行態(tài)時(shí),CPU狀態(tài)都與上次從運(yùn)行態(tài)退出時(shí)完全一樣。所以不再是使用一個(gè)CPU堆棧,而是多個(gè)任務(wù)將各自的運(yùn)行現(xiàn)場(chǎng)保存到自己的堆棧中。

另外,調(diào)用C函數(shù)時(shí)也會(huì)使用到堆棧,此時(shí)編譯器會(huì)創(chuàng)建一個(gè)堆棧;在C函數(shù)返回時(shí),將其釋放、其大小因C函數(shù)使用到的變量和編譯器的不同而不同、在移植時(shí),能夠正確創(chuàng)建、初始化、保存并恢復(fù)各個(gè)任務(wù)的堆棧,是確保OS任務(wù)切換和中斷管理順利完成的關(guān)鍵。

MPC555有32個(gè)32bit通用定點(diǎn)數(shù)寄存器,32個(gè)64bit浮點(diǎn)數(shù)寄存器,另有9個(gè)控制/狀態(tài)寄存器。針對(duì)MPC555的編程結(jié)構(gòu),設(shè)計(jì)如表1的堆棧結(jié)構(gòu)。每次任務(wù)環(huán)境入棧時(shí)創(chuàng)建一含73個(gè)位置的堆棧,為了保證浮點(diǎn)數(shù)寄存器的完整,每個(gè)位置為64bit寬。創(chuàng)建任務(wù)時(shí),建立該堆棧結(jié)構(gòu),并用默認(rèn)值對(duì)其進(jìn)行初始化。在任務(wù)保存或激活時(shí)把寄存器的值保存到堆棧中相應(yīng)位置,或者從堆棧的相應(yīng)位置把寄存器值彈出。其中GPR1被MPC作為堆棧指針SP使用,在堆棧操作時(shí),要注意控制好SP。

2 中斷管理

首先,分析一下MPC555的中斷結(jié)構(gòu)。在MPC中有新的概念——異常(Exception)。它包含所有CPU非正常事件的出現(xiàn),包括中斷、總線(xiàn)錯(cuò)誤、指令錯(cuò)誤、系統(tǒng)調(diào)用異常、實(shí)時(shí)中斷異常和復(fù)位等。MPC為異常提供了異常向量表。該表為每個(gè)異常提供一個(gè)256字節(jié)的異常處理代碼空間。

所有外部中斷和I/O子模塊產(chǎn)生的中斷共同作為異常的一種,占用異常向量表中的一個(gè)位置。在該異常處理程序中,軟件需根據(jù)中斷狀態(tài)寄存器的值判斷到底發(fā)生了哪個(gè)中斷并進(jìn)行相應(yīng)處理。

在每次發(fā)生異常時(shí),MPC自動(dòng)將主狀態(tài)寄存器MSR保存到SRR1中,將程序指針PC保存到SRR0中;然后PC指針指向該異常在異常向量表中的起始位置,進(jìn)入異常處理程序。每次異常返回時(shí),調(diào)用rfi指令,系統(tǒng)自動(dòng)將SRR1中的值返回MSR中,將SRR0中的值返回PC中,即程序從SRR0指向的位置繼續(xù)執(zhí)行。在發(fā)生異常和異常返回之間,不自動(dòng)允許新的異常和中斷。所以,程序需要在保存SRR0和SRR1后允許異常,在適當(dāng)?shù)臅r(shí)候允許中斷。

μC/OS-II的異常處理過(guò)程中,用戶(hù)及OS與硬件無(wú)關(guān)的代碼完成圖2中①、②、③、④、⑤這五個(gè)步驟。依次完成以下任務(wù):①給OSIntNesting加1或調(diào)用OSIntEnter(),通知OS,系統(tǒng)已進(jìn)入中斷;②分析中斷源調(diào)用相應(yīng)中斷處理子程;③在該中斷處理子程中完成清中斷源;④進(jìn)行其他中斷處理;⑤調(diào)用OSIntExit( )判斷是否有更高優(yōu)先級(jí)的任務(wù)被激活而需要進(jìn)行任務(wù)調(diào)度,若不需要,則直接從中斷返回;若需要,則調(diào)用OSIntCtxSw()完成中斷級(jí)任務(wù)調(diào)度。

移植中,為了在MPC555上實(shí)現(xiàn)上述中斷處理過(guò)程,需編寫(xiě)與硬件相關(guān)代碼,為以上思路提供三個(gè)接口函數(shù):進(jìn)入中斷、退出中斷和中斷級(jí)任務(wù)調(diào)度。根據(jù)MPC555的編程結(jié)構(gòu),設(shè)計(jì)的完整中斷程序流程如圖2。虛框Ⅰ部分寫(xiě)在異常向量表中每個(gè)異常的處理代碼空間中,依次調(diào)用Prologue( )、Exception-Routine( )和Epilogue( )三個(gè)函數(shù)。

其中,Exception-Routine( )函數(shù)為①到⑤步中斷處理子程提供調(diào)用接口。

虛框Ⅱ中為與硬件相關(guān)的函數(shù)Prologue( ),它將發(fā)生中斷時(shí)所有寄存器保存到當(dāng)前任務(wù)的堆棧中,并處理CPU狀態(tài)。是OS進(jìn)入中斷的接口函數(shù)。

虛框Ⅲ中為與硬件相關(guān)的函數(shù)Epilogue( ),它從當(dāng)前任務(wù)(可能是中斷發(fā)生時(shí)的任務(wù),也可能是新的被激活的任務(wù))堆棧中恢復(fù)所有CPU寄存器,并從中斷返回,是OS退出中斷的接口函數(shù)。

虛框Ⅳ中為與硬件和編譯器相關(guān)的函數(shù)OSIntCtxSw( )。它將新的高優(yōu)先級(jí)就緒態(tài)任務(wù)調(diào)整為當(dāng)前任務(wù),完成中斷級(jí)任務(wù)調(diào)度,隨后調(diào)用Epilogue( )退出中斷,進(jìn)入新的被激活的任務(wù)。應(yīng)注意,在中斷級(jí)任務(wù)調(diào)度過(guò)程中,①、⑤兩處C函數(shù)被調(diào)用后不需要返回,所以需要將堆棧指針SP向下做適當(dāng)調(diào)整,以丟棄這兩個(gè)函數(shù)調(diào)用時(shí)編譯器產(chǎn)生的堆棧、C函數(shù)調(diào)用時(shí),產(chǎn)生堆棧的大小與編譯器相關(guān),因此應(yīng)根據(jù)編譯器產(chǎn)生的代碼決定此處丟棄堆棧的大小。為保證異常時(shí)需要丟棄的堆棧大小不變,可使用圖2中的方法,在異常處理時(shí)另外調(diào)用函數(shù)完成步驟③、④,以確保不同異常處理過(guò)程中,①、⑤兩處C函數(shù)被調(diào)用時(shí),編譯器建立的堆棧大小一致。

3 任務(wù)切換

μC/OS-II中的任務(wù)調(diào)度由函數(shù)OSSched( )完成。在Intel 80x86系統(tǒng)上,OSSched( )在獲得當(dāng)前新的最高優(yōu)先級(jí)的任務(wù)指針后,調(diào)用CPU軟中斷完成任務(wù)切換。

在MPC555上,可以用系統(tǒng)調(diào)用異常處理程序“System Call Exception”代替軟中斷。該異常處理程序如圖3所示,完成以下三個(gè)步驟:①在prologue( )中將當(dāng)前任務(wù)運(yùn)行環(huán)境保存到當(dāng)前任務(wù)的堆棧中;②調(diào)用任務(wù)級(jí)調(diào)度函數(shù)OSCtxSw( ),將新的高優(yōu)先級(jí)就緒態(tài)任務(wù)調(diào)整為當(dāng)前任務(wù);③從新任務(wù)堆棧中彈出所有寄存器的值,恢復(fù)中斷,完成任務(wù)切換。其中①、③兩部分代碼與中斷管理程序相同,不需要重新編寫(xiě),只需編寫(xiě)函數(shù)OSCtxSw( )完成任務(wù)指針的切換工作。

任務(wù)切換過(guò)程不可以被打斷,所以,上述過(guò)程中始終不能打開(kāi)中斷。

4 時(shí)鐘管理

μC/OS-II需要在系統(tǒng)初始化后,開(kāi)始一個(gè)系統(tǒng)時(shí)鐘節(jié)拍,它是OS系統(tǒng)的時(shí)間基準(zhǔn)。該時(shí)鐘節(jié)拍一般由時(shí)間中斷產(chǎn)生。 MPC555中可產(chǎn)生時(shí)間節(jié)拍的模塊有很多,本次移植選用DEC異常。因?yàn)樗c外部中斷使用不同的異常向量,便于對(duì)異常事件的管理,有利于提高OS的穩(wěn)定性。

DEC時(shí)鐘同步于TMBCLK,其頻率可選,本次移植設(shè)置為2.5MHz。代碼在時(shí)鐘初始化和每次進(jìn)入DEC異常時(shí),將DEC計(jì)數(shù)器設(shè)置為2.5M/OS_TICKS_PER_SEC,這樣,可使OS每秒種產(chǎn)生OS_TICKS_PER_SEC個(gè)時(shí)鐘節(jié)拍。

5 應(yīng)用方法

在使用移植后的OS時(shí),用戶(hù)需要編寫(xiě)自己的主程序main( ),其流程如圖4。在適當(dāng)?shù)某跏蓟蠹纯蓡?dòng)OS。

另外,用戶(hù)需在TaskStart任務(wù)中啟動(dòng)時(shí)鐘節(jié)拍,調(diào)用OSStatInit( )函數(shù)初始化統(tǒng)計(jì)任務(wù),創(chuàng)建所需的其他任務(wù),最后調(diào)用OSTaskDel( )函數(shù)刪除TaskStart任務(wù)自己。OS在該函數(shù)調(diào)用結(jié)束后,會(huì)自動(dòng)允許異常和中斷,OS正常運(yùn)轉(zhuǎn),不斷調(diào)度任務(wù),響應(yīng)中斷。

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

在現(xiàn)代嵌入式系統(tǒng)開(kāi)發(fā)中,部署一個(gè)嵌入式操作系統(tǒng)(RTOS)可以顯著提升系統(tǒng)的實(shí)時(shí)性、穩(wěn)定性和可維護(hù)性。STM32F429作為STMicroelectronics推出的一款高性能微控制器,其強(qiáng)大的硬件性能和豐富的外設(shè)資源使...

關(guān)鍵字: STM32F429 嵌入式操作系統(tǒng)

本文中,小編將對(duì)嵌入式操作系統(tǒng)予以介紹,如果你想對(duì)它的詳細(xì)情況有所認(rèn)識(shí),或者想要增進(jìn)對(duì)它的了解程度,不妨請(qǐng)看以下內(nèi)容哦。

關(guān)鍵字: 嵌入式 嵌入式操作系統(tǒng) 操作系統(tǒng)

在下述的內(nèi)容中,小編將會(huì)對(duì)嵌入式操作系統(tǒng)的相關(guān)消息予以報(bào)道,如果嵌入式操作系統(tǒng)是您想要了解的焦點(diǎn)之一,不妨和小編共同閱讀這篇文章哦。

關(guān)鍵字: 嵌入式 嵌入式操作系統(tǒng) 操作系統(tǒng)

(全球TMT2022年10月25日訊)Elektrobit宣布推出首款適用于英飛凌科技公司 (Infineon Technologies AG )出品的新型 AURIX TC4x 微控制器(MCU)...

關(guān)鍵字: 監(jiān)控程序 虛擬機(jī) 嵌入式操作系統(tǒng) BSP

U-Boot,全稱(chēng)Universal Boot Loader,是遵循GPL條款的從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來(lái)的 開(kāi)放源碼項(xiàng)目。U-boot,是一個(gè)主要用于嵌入式系統(tǒng)的引導(dǎo)加載程序,可以支...

關(guān)鍵字: U-Boot GPL 嵌入式操作系統(tǒng)

5月25日,智芯公司自主研發(fā)的嵌入式操作系統(tǒng)——樞紐4.0(以下簡(jiǎn)稱(chēng)樞紐4.0)獲工信部賽寶實(shí)驗(yàn)室功能安全系統(tǒng)檢測(cè)認(rèn)證,標(biāo)志著公司的操作系統(tǒng)具備軌道交通與汽車(chē)電子等高安全標(biāo)準(zhǔn)工業(yè)行業(yè)的準(zhǔn)入條件,也標(biāo)志著公司在產(chǎn)品功能安全...

關(guān)鍵字: 智芯公司 嵌入式操作系統(tǒng) 汽車(chē)電子

3月31日,智芯公司自主研發(fā)的嵌入式操作系統(tǒng)--樞紐4.0(以下簡(jiǎn)稱(chēng)“樞紐4.0”)成功通過(guò)國(guó)內(nèi)權(quán)威檢測(cè)機(jī)構(gòu)--工信部中國(guó)電子信息產(chǎn)業(yè)發(fā)展研究院檢測(cè)認(rèn)證,內(nèi)核代碼自主率達(dá)到100%,是智芯公司在工控芯片操作系統(tǒng)研發(fā)方面取...

關(guān)鍵字: 智芯公司 嵌入式操作系統(tǒng) 人工智能

關(guān)注「Linux大陸」,一起進(jìn)步!大家好,我是ZhengN?,F(xiàn)在,嵌入式操作系統(tǒng)已經(jīng)越來(lái)越多了,如大家都熟知的uCOS、FreeRTOS、RT-Thread等。這些操作系統(tǒng)都各有各的特點(diǎn),具體可閱讀:?盤(pán)點(diǎn)一些嵌入式實(shí)時(shí)...

關(guān)鍵字: 內(nèi)核 嵌入式操作系統(tǒng)

對(duì)于基礎(chǔ)軟件,系統(tǒng)是核心,是功能實(shí)現(xiàn)的基礎(chǔ),TD X-OS便是一款輕量高效的嵌入式操作系統(tǒng),支持跨硬件平臺(tái),為智能終端產(chǎn)品提供優(yōu)質(zhì)的功能服務(wù)基礎(chǔ)和平臺(tái)環(huán)境。

關(guān)鍵字: TD X-OS XOS 嵌入式操作系統(tǒng)

“操作系統(tǒng)”作為所有軟件的基礎(chǔ),是計(jì)算機(jī)王國(guó)的掌舵者。我們常用“靈魂、大腦、內(nèi)核、基石”等詞來(lái)形容它,足以見(jiàn)得它對(duì)計(jì)算機(jī)而言有多么重要。?事實(shí)也確實(shí)如此,作為每個(gè)程序員必須好好修煉的“基本功”,它能直接解決我們?cè)诠ぷ髦械?..

關(guān)鍵字: 嵌入式操作系統(tǒng)
關(guān)閉