日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

一種實(shí)時(shí)操作系統(tǒng)μC/OS-II在LPC2114上移植的實(shí)現(xiàn)

出處:廖文良,褚藝斌,陳文薌 發(fā)布于:2011-07-20 08:24:21

  傳統(tǒng)的嵌入式系統(tǒng)設(shè)計(jì)大多采用單任務(wù)順序機(jī)制,應(yīng)用程序是一個(gè)無限的大循環(huán),所有的事件都按順序執(zhí)行,與時(shí)間相關(guān)性較強(qiáng)的事件靠定時(shí)中斷來保證,由此帶來系統(tǒng)的穩(wěn)定性、實(shí)時(shí)性較差;尤其當(dāng)系統(tǒng)功能較復(fù)雜,且對實(shí)時(shí)性要求較嚴(yán)格時(shí),這種單任務(wù)機(jī)制的弱點(diǎn)暴露無遺。本文引入的嵌入式操作系統(tǒng)μC/OS-II是一個(gè)多任務(wù)的實(shí)時(shí)內(nèi)核,主要提供任務(wù)管理功能。在實(shí)時(shí)系統(tǒng)中的多個(gè)任務(wù),必須決定這些任務(wù)的優(yōu)先級(jí)順序,任務(wù)調(diào)度算法需要?jiǎng)討B(tài)為就緒任務(wù)的優(yōu)先級(jí)排序。為了滿足對實(shí)時(shí)性要求越來越高的需要,同時(shí)避免頻繁改變就緒任務(wù)的優(yōu)先級(jí),在分析μC/OS-II源代碼的基礎(chǔ)上,對其調(diào)度算法進(jìn)行改進(jìn)。

  LPC2114是Philips公司開發(fā)的一款支持實(shí)時(shí)仿真和跟蹤的ARM7TDMI-S CPU,并嵌入了128KB的高速Flash存儲(chǔ)器。其內(nèi)部集成了與片內(nèi)存儲(chǔ)器控制器接口的ARM7局部總線、與中斷控制器接口的AMBA高性能總線(AHB)和連接片內(nèi)外設(shè)功能的VLSI外設(shè)總線(VPB,ARM AMBA總線的兼容超集)。LPC2114將ARM7TDMI-S配置為小端(little-endian)字節(jié)順序。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在時(shí)鐘頻率下運(yùn)行。

  將μC/OS-II移植在LPC2119上不僅有益于ARM和μC/OS-II在車用控制器上的應(yīng)用,其成果還可以用于其他嵌入式工業(yè)控制領(lǐng)域。本次移植中,使用CodeWarrior For ARM Developer Suite v1.2編譯調(diào)試環(huán)境。

  1  μC/OS-II系統(tǒng)結(jié)構(gòu)

  μC/OS-II是一個(gè)完整的,可移植、可固化、可裁剪的占先式實(shí)時(shí)多任務(wù)內(nèi)核;支持56個(gè)用戶任務(wù),支持信號(hào)量、郵箱、消息隊(duì)列等常用的進(jìn)程間通信機(jī)制;適用于各種微控制器微處理器;所有代碼用ANSI C語言編寫,程序的可讀性強(qiáng),具有良好的可移植性,已被移植到多種處理器架構(gòu)中,在某些實(shí)時(shí)性要求嚴(yán)格的領(lǐng)域中得到廣泛應(yīng)用。

  圖1為μC/OS-II的軟硬件體系結(jié)構(gòu)。應(yīng)用程序處于整個(gè)系統(tǒng)的頂層,每個(gè)任務(wù)都可以認(rèn)為自己獨(dú)占了CPU,因而可以設(shè)計(jì)成為一個(gè)無限循環(huán)。μC/OS-II處理器無關(guān)的代碼提供了μC/OS-II的系統(tǒng)服務(wù),應(yīng)用程序可以使用這些API函數(shù)進(jìn)行內(nèi)存管理、任務(wù)間通信以及創(chuàng)建、刪除任務(wù)等。

  大部分μC/OS-II代碼是使用ANSI C語言編寫的,因此μC/OS-II的可移植性較好。盡管如此,仍然需要使用C和匯編語言寫一些處理器相關(guān)的代碼。μC/OS-II的移植需要滿足下列要求:(1)處理器的C編譯器可以產(chǎn)生可重入代碼。(2)可以使用C調(diào)用進(jìn)入和退出Critical Code(臨界區(qū)代碼)。(3)處理器必須支持硬件中斷,并且需要一個(gè)定時(shí)中斷源。(4)處理器需要能夠容納一定數(shù)據(jù)的硬件堆棧。(5)處理器需要有能夠在CPU寄存器與內(nèi)存和堆棧交換數(shù)據(jù)的指令。

  移植μC/OS-II的主要工作涉及處理器及編譯器相關(guān)代碼以及BSP的編寫。

  2  μC/OS-II BSP的編寫

  BSP是板級(jí)支持包,是介于主板硬件和操作系統(tǒng)之間的一層,應(yīng)該說是屬于操作系統(tǒng)的一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好的運(yùn)行于硬件主板。BSP是相對于操作系統(tǒng)而言的,不同的操作系統(tǒng)對應(yīng)于不同定義形式的BSP,例如VxWorks的BSP和Linux的BSP相對于某一CPU來說盡管實(shí)現(xiàn)的功能一樣,可是寫法和接口定義是完全不同的,所以寫B(tài)SP一定要按照該系統(tǒng)BSP的定義形式來寫(BSP的編程過程大多數(shù)是在某一個(gè)成型的BSP模板上進(jìn)行修改)。這樣才能與上層OS保持正確的接口,良好的支持上層OS.

  為μC/OS-II編寫一個(gè)簡單的BSP的方法是:首先設(shè)置CPU內(nèi)部寄存器和系統(tǒng)堆棧,并初始化堆棧指針,建立程序的運(yùn)行和調(diào)用環(huán)境;然后使用C語言設(shè)置LPC2114向量中斷控制器、GPIO以及SRAM控制器,初始化串口(UART0)作為默認(rèn)打印口,并向操作系統(tǒng)提供一些硬件相關(guān)例程和函數(shù)(如dprintf( )),以方便調(diào)試;在CPU、板級(jí)和程序自身初始化完成后,就可以把CPU的控制權(quán)交給操作系統(tǒng)了。

  LPC2114處理器支持七種類型的異常。異常出現(xiàn)后,CPU強(qiáng)制從異常類型對應(yīng)的固定存儲(chǔ)地址開始執(zhí)行程序,因此需要在程序頭建立起異常向量表,例如:


 

 

  向量從上到下依次為復(fù)位、未定義指令異常、軟件中斷、預(yù)取指令中止、預(yù)取數(shù)據(jù)中止、保留的異常、IRQ和FIQ.保留的異常向量位置所填的數(shù)據(jù)0xb9205f80是為了使向量表中所有的數(shù)據(jù)32位累加和為0.這個(gè)向量在ARM文件中標(biāo)識(shí)為保留,該位置被Boot裝載程序用作有效的用戶程序關(guān)鍵字。當(dāng)向量表中所有的數(shù)據(jù)累加為0(且外部硬件禁止進(jìn)入ISP程序)時(shí),Boot裝載程序?qū)?zhí)行用戶程序。

  從異常向量表可知:芯片復(fù)位時(shí)程序會(huì)跳轉(zhuǎn)到標(biāo)號(hào)Reset處。程序首先調(diào)用InitStack初始化各種模式的堆棧,然后調(diào)用TargetResetInit對系統(tǒng)進(jìn)行基本的初始化,跳轉(zhuǎn)到ADS提供的啟動(dòng)代碼__main.例如:

  Reset

  BL InitStack

  BL TargetResetInit

  B__main

  同時(shí)在每個(gè)硬件時(shí)鐘到來后,μC/OS-II會(huì)在中斷服務(wù)例程中調(diào)用OSIntCtxSw( )進(jìn)行任務(wù)調(diào)度。另外,當(dāng)某個(gè)任務(wù)因等待資源而被掛起時(shí),它可以自己主動(dòng)放棄CPU,而沒有必要等到自己的時(shí)間片全都用完。這可以通過調(diào)用一個(gè)任務(wù)級(jí)的任務(wù)調(diào)度函數(shù)OSCtxSw( )來實(shí)現(xiàn),其中相對復(fù)雜的是OSIntCtxSw( )。由于OSLickISR( )調(diào)用了 OSIntExit( ),OSIntExit( )又再次調(diào)用了OSIntCtxSw( ),如果進(jìn)行任務(wù)切換,則二次調(diào)用都不會(huì)返回,而不同的C編譯器、不同的編譯選項(xiàng)處理C調(diào)用時(shí)對堆棧的使用也不盡相同。因此OSIntCtxSw( )是與編譯器相關(guān)的。在ADS編譯環(huán)境下,OSIntCtxSw的軟件流程如圖2所示。

  3  μC/OS-II 任務(wù)堆棧初始化

  μC/OS-II中每個(gè)任務(wù)都有自己的任務(wù)堆棧。在任務(wù)創(chuàng)建初期由OSTaskStkInit( )初始化。初始化堆棧的目的就是模擬中斷。任務(wù)堆棧中保存了任務(wù)代碼的起始地址和一些CPU寄存器(初值是無關(guān)緊要的),這樣一旦條件滿足,就可以執(zhí)行任務(wù)了。LPC2114在中斷發(fā)生時(shí),會(huì)自動(dòng)保存程序指針PC、狀態(tài)寄存器SR以及其他一些信息。圖3為針對LPC2114編程結(jié)構(gòu)設(shè)計(jì)的堆棧結(jié)構(gòu)。

  本次移植的函數(shù)OSTaskStkInt( )代碼為:


 

  4  μC/OS-II系統(tǒng)時(shí)鐘管理

  μC/OS-II需要在系統(tǒng)初始化時(shí)開始一個(gè)系統(tǒng)時(shí)鐘節(jié)拍,它是OS系統(tǒng)的時(shí)間基準(zhǔn)。該時(shí)鐘節(jié)拍一般由時(shí)間中斷產(chǎn)生。LPC2114中可產(chǎn)生時(shí)鐘節(jié)拍的模塊很多,本次移植采用定時(shí)器0異常。因?yàn)樗c外部中斷使用不同的異常向量,便于對異常事件的管理,有利于提高OS的穩(wěn)定性。32位定時(shí)器TC的計(jì)數(shù)頻率由plck經(jīng)過PR分頻控制得到,而定時(shí)器的啟動(dòng)/停止、計(jì)數(shù)復(fù)位由TCR控制。當(dāng)有捕獲事件或比較匹配事件發(fā)生時(shí),IR會(huì)設(shè)置相關(guān)的中斷標(biāo)志,若已打開中斷允許,則會(huì)產(chǎn)生中斷。

  本次移植設(shè)置系統(tǒng)時(shí)鐘頻率為11.0592MHz,代碼在時(shí)鐘初始化和每次進(jìn)入定時(shí)器0異常時(shí),將定時(shí)器0的計(jì)數(shù)器PWMTC設(shè)置為11.0592M/OS_TICKS_PER_SEC,這樣可使OS每秒鐘產(chǎn)生OS_TICKS_PER_SEC的時(shí)鐘節(jié)拍。

  5  應(yīng)用方法

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

  另外,用戶需在TaskStart任務(wù)中啟動(dòng)時(shí)鐘節(jié)拍,調(diào)用OS_StartInit( )函數(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)鍵詞:一種實(shí)時(shí)操作系統(tǒng)μC/OS-II在LPC2114上移植的實(shí)現(xiàn)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!