亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        μC/OS-II系統(tǒng)的移植分析與應用

        2013-12-10 14:07:12西安翻譯學院湯宏萍薛根福
        電子世界 2013年4期
        關鍵詞:編譯器堆棧內(nèi)核

        西安翻譯學院 湯宏萍 薛根福

        1.引言

        嵌入式系統(tǒng)[1]主要由嵌入式處理器、相關支撐硬件、嵌入式操作系統(tǒng)及應用軟件系統(tǒng)等組成。嵌入式操作系統(tǒng)作為嵌入式系統(tǒng)的核心組成部分,必須具備良好的可移植性才能滿足嵌入式系統(tǒng)的多樣化需求。μC/OSII[1]是用ANSI的C語言編寫的,它是一個完整的、可移植、可固化、可裁剪的占先式實時多任務內(nèi)核操作系統(tǒng)。至今,從8位到64位,μC/OS-II已經(jīng)在各種不同架構(gòu)的微處理器上運行,目前市場上已經(jīng)有許多應用μC/OS-II的嵌入式產(chǎn)品,因此研究μC/OS-III操作系統(tǒng)及其移植技術很有價值。文章首先對μC/OS-II操作系統(tǒng)的移植可行性進行分析,然后結(jié)合基于ARM體系LPC2294處理器的EASYARM開發(fā)板闡述了μC/OS-II系統(tǒng)移植的一般過程,最后對μC/OS-II系統(tǒng)的移植進行了測試。

        2. C/OS-II操作系統(tǒng)移植的可行性分析

        2.1 μC/OS-II操作系統(tǒng)移植的條件

        要使μC/OS-II正常運行,處理器必須需滿足以下要求[2]:

        ①處理器的C編譯器能產(chǎn)生可重入代碼;

        ②用C語言可以開/關中斷;

        ③處理器支持中斷,并且能夠產(chǎn)生定時中斷;

        ④處理器能夠支持容納一定量數(shù)據(jù)的硬件堆棧;

        ⑤處理器有將堆棧指針和其他寄存器讀出和存儲到堆棧或內(nèi)存中的指令。

        在采用μC/OS-II系統(tǒng)的移植中,作者采用ARM LPC2294[3]微控制器,該微控制器可以滿足上述②、④、⑤條件,而ADS1.2的C編譯器可以滿足①、③的要求。

        2.2 μC/OS-II操作系統(tǒng)軟件的體系結(jié)構(gòu)是移植的基礎

        所謂移植[2],就是使一個實時內(nèi)核能在微處理器或微控制器上運行。在設計之初,μC/OS-II就考慮到嵌入式系統(tǒng)硬件平臺的多樣性和操作系統(tǒng)的可移植性問題,大部分代碼采用C語言開發(fā),只有部分與處理器硬件相關的代碼采用匯編語言編寫,而且整個系統(tǒng)采用模塊化設計,將不同功能的軟件分成不同的組件,分別位于系統(tǒng)的不同層次。這種可復用的層次結(jié)構(gòu)是實現(xiàn)μC/OS-II可配置性、可移植性、兼容性以及可擴展性的基礎,μC/OS-II系統(tǒng)軟件的體系結(jié)構(gòu)如圖1所示[2]。

        在圖1中,包含以下三個部分:

        核心部分:該部分代碼與處理器的類型無關,包含了1個頭文件和7個用C語言編寫的源文件。主要功能是內(nèi)核管理、事件管理、消息隊列管理、存儲管理、消息管理、信號量處理、任務調(diào)度和定時管理。

        配置文件部分:主要功能是配置事件控制塊數(shù)目和是否包含消息管理的相關代碼。

        移植代碼部分:這部分是與處理器相關的代碼,包含一個頭文件、一個匯編源碼文件和一個C源碼文件。

        3. C/OS-II操作系統(tǒng)移植應用

        3.1 μC/OS-II移植的硬件資源

        在移植系統(tǒng)之前,首先必須了解目標系統(tǒng)的硬件資源,根據(jù)目標系統(tǒng)特定的硬件資源完成系統(tǒng)移植。應用中的目標系統(tǒng)采用EASYARM2200開發(fā)板,它屬于ARM體系結(jié)構(gòu),主要硬件資源如下:

        處理器:ARM體系16/32位嵌入式處理器LPC2294;

        內(nèi)存:16KB RAM,256KB Flash;

        外圍設備控制器:CAN口、RS-232串行口、以太網(wǎng)控制器RTL8019;

        調(diào)試接口:ARM-ICE JTAG。

        3.2 移植具體步驟

        與處理器相關代碼是移植過程中最關鍵的部分,內(nèi)核將應用系統(tǒng)和底層硬件有機的結(jié)合成一個實時系統(tǒng)。要使同一個內(nèi)核能適用于不同的硬件體系,就需要在內(nèi)核和硬件之間有一個中間層,這就是與處理器相關的代碼,處理器不同,這部分代碼也不同。在μC/OS-II中,這部分代碼分成3個文件:OS_CPU.H,OS_CPU_A.ASM,OS_CPU.C。

        (1)OS_CPU.H包括用#define定義的與處理器相關的常量、宏和類型定義。依據(jù)LPC2294所支持的數(shù)據(jù)類型定義相關常量,定義棧增長的方向為1,即從高地址往低地址遞減生長;開關中斷這里采用的是定義的函數(shù)OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL();定義用系統(tǒng)的軟中斷OS-TASKSW()進行任務切換。

        (2)OS_CPU_A.ASM這部分需要對處理器的寄存器進行操作,所以必須由匯編語言來編寫,主要編寫4個函數(shù)OSStartHighRdy(0,OSCtxSw(),OSIntCtxSw(0,OSTickISR()。

        OSStartHighRdy()功能:通過設置系統(tǒng)運行標志位OSRunning=TRUE,將就緒表中最高優(yōu)先級任務的棧指針裝載到SP中,并強制中斷返回。

        OSCtxSw()功能:通過先前在OS_CPU.H中定義的軟中斷指令進行任務級切換。中斷服務子程序、陷阱、異常處理的向量地址必須指向OSCtxSw()

        圖1 C/OS-II系統(tǒng)軟件的體系結(jié)構(gòu)

        OSIntCtxSw()功能:實現(xiàn)中斷級任務切換。與OSCtxSw()函數(shù)類似,只是少了一些保存某些寄存器的工作。

        OSTickISR()是系統(tǒng)時鐘節(jié)拍中斷服務函數(shù)。這是一個周期性中斷,為內(nèi)核提供時鐘節(jié)拍,頻率越高,負擔越重。必須是在調(diào)用OSStart()之后啟動時鐘節(jié)拍中斷。

        (3)OS_CPU.C這部分定義了6個函數(shù)。其中最重要的是OSTaskStkInit(),它是用戶建立任務時系統(tǒng)內(nèi)部自己調(diào)用的,對用戶任務的堆棧進行初始化,使建立好的進入就緒態(tài)任務的堆棧與系統(tǒng)發(fā)生中斷并且與環(huán)境變量保存完畢時的堆棧結(jié)構(gòu)一致。其余函數(shù)必須聲明,但可以不包含任何代碼,這些函數(shù)可以作為內(nèi)核函數(shù)的補充。為了使程序執(zhí)行效率高,在本次移植中OSTaskStkInit()是用匯編編寫的。

        4.測試移植代碼[2]

        完成將μC/OS-II移植到處理器上后,下一步工作就是驗證移植后μC/OS-II操作系統(tǒng)是否正常工作,這也是移植中最復雜的一步。測試分為2種情況:首先不加任何應用代碼來測試移植好μC/OS-II,即首先測試內(nèi)核自身的運行狀況。這樣做有兩個好處:首先,用戶不希望將事情復雜化;其次,如果有些部分沒有正常工作,可以明白是移植本身的問題,而不是應用代碼產(chǎn)生的問題。如果已經(jīng)將2個基本的任務和節(jié)拍中斷運行起來,那么接下來的添加應用任務是非常簡單的。其次是建立基于信號量進行通信的幾個任務,在此基礎上驗證內(nèi)核的多任務調(diào)度是否正確,從而驗證系統(tǒng)移植成功與否。本文通過4個步驟測試移植代碼:

        (1)確保C編譯器、匯編編譯器及鏈接器正常工作

        當修改完需要根據(jù)CPU更改的文件后,緊接著要把這些文件和μC/OS-II中與處理器無關的文件一同編譯和鏈接。顯然,這個步驟取決于使用的編譯器。測試需要用到3個文件:TEST.C、INCLUDES.H、OS-CFG.H。TEST.C程序如下:

        (2)驗證OSTaskStkInit()和OSStart-HighRdy()函數(shù)

        首先,修改OS-CFG.H,設置OS-TASKSTAT-EN為0,以禁止統(tǒng)計任務。在TEST.C里并沒有添加任何應用任務,所以惟一的任務是UC/OS-II的空閑任務OS-TaskIdle()。一直單步執(zhí)行,直到UC/OS-II運行到調(diào)用OSStartHighRdy()。這時,編譯器應該切換到匯編模式下,因為OSStartHighRdy()是用匯編語言實現(xiàn)的。OSStartHighRdy()會開始運行第一個任務;而此時并沒有任何應用任務,只有OS-TaskIdle()可以運行。繼續(xù)單步執(zhí)行,同時檢查是否出錯。實際上,OSStartHighRdy()會將OSTaskStkInit()推入堆棧的CPU寄存器,并按照相反的方向順序彈出。如果這一點不正確,堆棧指針就會出錯。這時應該校正OSTaskStkInit()函數(shù)。OSStartHighRdy()的最后一條語句會從中斷中返回。一旦執(zhí)行這條語句,調(diào)試器就應該指向OS-TaskIdle()的第一條指令。如果這一步?jīng)]有發(fā)生,那么可能是因為沒有將正確的任務起始指針放在任務堆棧中,這時也需要修改OSTaskStkInit()函數(shù)。如果調(diào)試器在OSTaskStkInit()的循環(huán)中執(zhí)行,且在無限循環(huán)中已經(jīng)執(zhí)行幾次,那么就驗證了OSTaskStkInit()和OSStartHighRdy()是正確的。

        (3)驗證OSCtxSw()函數(shù)

        在這一步的測試中,添加了一個應用程序,并不斷切換到空閑任務。

        可以單步執(zhí)行進入OSTimeDly()函數(shù)。當調(diào)用OSTimeDly(1)時,會發(fā)生任務切換。如果OSTimeDly()代碼正確,LED會快速閃爍。

        (4)驗證OSIntCtxSw()函數(shù)和OSTick-ISR()函數(shù)。

        5.結(jié)束語

        嵌入式系統(tǒng)是一個軟硬件集合體,而作為嵌入式系統(tǒng)的核心組件嵌入式操作系統(tǒng)必須具備良好的可移植性以適應各種不同處理器體系結(jié)構(gòu)的嵌入式應用需求。本文成功地將嵌入式操作系統(tǒng)μC/OS-II移植到了LPC2294上,并詳細闡述了μC/OS-II的系統(tǒng)移植的一般過程,為嵌入式開發(fā)者提供參考。

        [1]唐恒娟等.eCos系統(tǒng)移植分析與應用[J].微電子學與計算機,2006,23(3).

        [2]Jean J.Labrosse.邵貝貝.嵌入式實時操作系統(tǒng)μCOS-Ⅱ[M].北京:北京航空航天大學出版社,2003:72-115.

        [3]周立功.ARM嵌入式系統(tǒng)基礎教程[M].北京航空航天大學出版社,2005.

        猜你喜歡
        編譯器堆棧內(nèi)核
        萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
        強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
        基于嵌入式Linux內(nèi)核的自恢復設計
        Linux內(nèi)核mmap保護機制研究
        嵌入式軟件堆棧溢出的動態(tài)檢測方案設計*
        基于堆棧自編碼降維的武器裝備體系效能預測
        通用NC代碼編譯器的設計與實現(xiàn)
        一種用于分析MCS-51目標碼堆棧深度的方法
        編譯器無關性編碼在微控制器中的優(yōu)勢
        日韩精品无码中文字幕电影| 青青久久精品一本一区人人| 亚州终合人妖一区二区三区| 亚洲乱码一区av春药高潮| 波多野吉衣av无码| 成人国产在线观看高清不卡| 日韩女优一区二区在线观看| 日本女优爱爱中文字幕| 看日本全黄色免费a级| 国产亚洲精品久久久ai换| 手机在线精品视频| 中文字幕人妻一区色偷久久| 久久精品人妻少妇一二三区| 最近免费mv在线观看动漫| 精品久久久久一区二区国产| 91蜜桃精品一区二区三区毛片| 午夜被窝精品国产亚洲av香蕉| 99久久国产综合精品五月天| 2021年国产精品每日更新| 白丝美女扒开内露出内裤视频| 99国产精品久久99久久久| 搡老熟女中国老太| 中文字幕无码免费久久99| 亚洲一区中文字幕视频| 观看在线人视频| 亚洲一区二区三区国产精华液| 欧美国产伦久久久久久久| 亚洲国产中文字幕精品| 日韩欧美成人免费观看| 久久久久国产精品熟女影院| 国产精品一卡二卡三卡| 精品一区二区三区a桃蜜| 久久亚洲精品成人av无码网站| 亚洲日本中文字幕天天更新| 亚洲一区二区婷婷久久| 国产在线一区二区三区不卡| 国产丝袜美女一区二区三区| 国产精品二区在线观看| 天堂av一区二区麻豆| 国产精品久久国产精品99 gif| 天天干夜夜操|