《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > μC/OS-Ⅱ在ARM7上移植方法的探討與實現
μC/OS-Ⅱ在ARM7上移植方法的探討與實現
摘要: μC/OS-Ⅱ核心代碼很小,程序開發人員要把他移植到自己的目標板中只需做少量的工作。圖1是基于μC/OS-Ⅱ的嵌入式系統的軟硬件體系結構。
關鍵詞: ARM ARM7 μC/OS-Ⅱ 嵌入式
Abstract:
Key words :

       隨著嵌入式技術的快速發展,實時多任務操作系統作為一種軟件平臺已逐步成為國際嵌入式系統的主流,目前世界上已經有一大批成熟的實時嵌入式操作系統,通常,對嵌入式軟件的基本要求是體積小、指令速度快、具有較好的裁減性和可移植性,目前,實時操作系統很多,如VxWorks,Windows CE,pSOS,QNX,LynxOS等,這些操作系統都具有高可靠性、強實時性等特點,但他們都是商業操作系統,價格昂貴,人們往往很難接受,μC/OS-Ⅱ操作系統的出現是對這些商業操作系統的一個很大的沖擊。

       1 μC/OS-Ⅱ操作系統簡介

       μC/OS-Ⅱ是源碼公開的實時操作系統,是一個自由操作系統。程序開發人員可以改寫源代碼,使之符合自己的要求,裁減掉不需要的部分,使操作系統變得小巧、靈活、并且能滿足用戶特定操作系統的需要。為了提高系統的實時能力,μC/OS-Ⅱ可以將一個復雜的應用劃分為多個相互獨立的任務,并根據任務的重要性來分配優先級。任務的調度完全由μC/OS-Ⅱ的實時內核完成,主要包括任務的狀態管理、選擇最高優先級的任務、執行任務和撤銷任務等,μC/OS-Ⅱ內核還負責CPU時間分配,CPU時間總是優先分配給中斷事件,其次是任務隊列中當前優先級最高的任務,不同任務間的通信可以通過μC/OS-Ⅱ提供的信號量、郵箱、信息隊列等機制完成,他的絕大部分代碼是用C語言編寫的,可移植性強,因此1997年以后,在國際上逐漸被廣泛采用。

       2 其軟硬件體系及可移植性分析

       μC/OS-Ⅱ核心代碼很小,程序開發人員要把他移植到自己的目標板中只需做少量的工作。圖1是基于μC/OS-Ⅱ的嵌入式系統的軟硬件體系結構。

       雖然μC/OS-Ⅱ大部分源代碼是用C語言寫的,但是完成和處理器有關的代碼時,還是用匯編語言來實現的,由圖1可以看出,μC/OS-Ⅱ的移植的主要工作是修改與處理器相關部分的代碼,他們集中在3個文件中,其中,OS_CPU.H包含與處理器相關的常量、宏和結構體的定義;OS_CPU_C.C和OS_CPU_ASM中定義了用于底層的任務切換,退出中斷服務程序,在CPU級屏蔽中斷、打開中斷、對任務棧初始化以及時鐘的中斷服務程序的函數等,為了使應用程序運行于μC/OS-Ⅱ上,還要相應地修改應用中使用的硬件和設備驅動。

       3 μC/OS-Ⅱ的移植工作

       3.1 與應用相關的代碼

       這一部分是用戶根據自己的應用系統來定制合適的內核服務功能,包括2個文件:OS_CFG.H和INCLUDES.H。

嵌入式系統軟硬件體系結構

       OS_CFG.H 用來配置內核,用戶根據需要對內核進行修改,留下需要的部分,去掉不需要的部分,比如系統可提供的最大任務數量,是否定制郵箱服務,是否提供優先級動態改變功能等等,所有的配置更改包括頭文件的增減均在該文件中進行。

       INCLUDES.H 系統頭文件,整個實時系統程序所需要的文件,包括了內核和用戶的頭文件,這樣使得用戶項目中的每個.C文件不用分別去考慮他實際上需要哪些頭文件。

       3.2 與處理器相關的代碼

       這是移植中最關鍵的部分。內核將應用系統和底層硬件有機地結合成一個實時系統,要使同一個內核能適用于不同的硬件體系,就需要在內核和硬件之間有一個中間層,這就是與處理器相關的代碼,處理器不同,這部分代碼也不同,我們在移植時需要自己處理這部分代碼,在μC/OS中這一部分代碼分成3個文件:OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C。

       3.2.1 OS_CPU.H

       包含了用#define定義的與處理器相關 的常量、宏和類型定義,具體有系統數據類型定義、棧增長方向定義、關中斷和開中斷定義、系統軟中斷的定義等。

       (1)不依賴于編譯的數據類型

       μC/OS-Ⅱ不使用C語言中的short,int和long等數據類型的定義,因為他們與處理器類型有關,隱含著不可移植性,代之以移植性強的整數數據類型,這樣,既直觀又可移植。根據ADS編譯器的特性,代碼為:

       typedef unsigned char BOOLEAN;
       typedef unsigned char INT8U;
       typedef signed char INT8S;
       typedef unsigned short INT16U;
       typedef signed short INT16S;
       typedef unsigned int INT32U;
       typedef signed int INT32S;
       typedef float FP32;
       typedef double FP64;
       typedef INT32U OS_STK;

 

       (2)使用軟中斷SWI做底層接口

       因為帶T變量的ARM7處理器核具有兩個指令集,用戶任務可以使用兩種處理器模式,為了使底層接口函數與處理器狀態無關,同時在任務調用相應函數時不需要知道該函數位置,本例使用軟中斷指令SWI作為底層接口,使用不同的功能號區分不同的函數,其SWI服務函數代碼為:
   

       SWI服務函數代碼

 

       (3)OS_STK_GROWTH

       μC/OS-Ⅱ使用結構常量OS_STK_GROWTH指定堆棧的生長方式,其代碼為:

       #define OS_STK_GROWTH 1

       3.2.2 OS_CPU_C.C

       包含了與移植有關的C函數,包括堆棧的初始化和一些鉤子函數的實現,但是最重要的是OSTaskStkInit()函數,該函數是在用戶建立任務時系統內部自己調用的,用來對用戶任務的堆棧初始化。在ARM7體系結構下,任務堆棧空間由高至低遞減,依次保存著PC,LR,R12,…,R1,R0,CPSR的初始化堆棧結構,當用戶初始化了堆棧,OSTaskStkInit()就返回新的堆棧指針STK所指的定地址。OSTaskCreate()和OSTaskCreateExt()會獲得該地址并將他保存到任務控制塊TCB中,其他的幾個鉤子函數必須聲明,但可以不包含任務代碼,這些鉤子函數在本移植中全為空函數。

       3.2.3 OS_CPU_A.S

       μC/OS-Ⅱ移植的絕大部分工作都集中在OS_CPU_A.S文件的移植上,在這個文件里,最困難的工作又集中體現在OSIntCtxSw和OSTickISR這兩個函數的實現上。這是因為這兩個函數的實現是和移植者的移植思路以及相關硬件定時器、中斷寄存器的設置有關,在實際的移植工作中,這兩個地方也是比較容易出錯的地方,這部分需要對處理器的寄存器進行操作,所以必須用 匯編語言編寫,包括4個子函數:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。

       OSStartHighRdy()該函數首先調用鉤子函數OSTaskSwHook(),然后將OSRunning標志位設置為真,表示任務開始執行,從而保證任務切換操作的正確執行,緊接著從具有最高優先級的任務控制塊中取得任務的堆棧指針,初始化堆棧指針寄存器SP,然后恢復其他的寄存器,開始執行最高優先級的任務。

       OSCtxSw()該函數在任務級任務切換函數中調用,首先保存處理器寄存器,將當前SP存入任務TCB中,載入就緒最高優先級任務的SP,從新任務的任務堆棧中恢復處理器所有寄存器的值,然后執行中斷返回指令。

       OSIntCtxSw()該函數是在ISR中執行任務切換功能,其原理基本上與任務級的切換相同,區別只是ISR已經保存了CPU的寄存器,因此不要再進行類似的操作,只需對堆棧指針作相應的調整即可。

       OSTickISR()該函數是系統時鐘節拍中斷服務函數,首先要保存處理器寄存器,接著調用OSIntEnter()函數,以保證中斷嵌套層數不超過255層,如果滿足了該條件,則把堆棧指針保存到當前任務的任務控制塊TCB中,然后給產生中斷的設備清中斷,重新允許中斷,接下來調用OSTimeTick()來維持μC/OS-Ⅱ內部的定時以及調用OSIntExit()函數決定是否因為這個中斷服務程序的執行,使得更高優先級的任務就緒。

       4 μC/OS-Ⅱ的測試

       做完移植工作以后,就要測試移植是否正確,這其實是移植過程的最后一步,應該首先不加任何用代碼來測試移植好的μC/OS-Ⅱ,即應該首先測試內核自身的運行狀況,這樣做的目的是如果有些部分未能正常工作,那就是移植本身的問題,而不是應用代碼產生的問題,主要分為以下幾個步驟來進行移植的測試:

       首先,必須了解處理器所使用的編譯器系統,這個步驟取決于使用的編譯器,在這期間是無代碼的測試,其次,要驗證OSTaskStkInit()和OSStartHighRdy()函數,在OS_CFG.H文件中設置OS_TASK_STAT_EN為0,只讓一個空閑任務OS_TaskIdle()運行,檢查是否出錯,然后需要驗證任務級切換OSCtxSw()函數,在測試任務TaskTest()中加入OSTimeDly()函數,OSTimeDly()函數接著調用OS_Sched(),OS_Sched()調用匯編語言編寫的函數OSCtxSw()函數,如果是正確配置了SWI,CPU就會開始執行OSCtxSw(),最后,需要驗證OSIntCtxSw()和OSTickISR()函數。

       當上述的這些測試步驟都成功后,可以嘗試運行一些具體的任務,按照由簡到繁的過程不斷使測試變得復雜,來進一步驗證內核的穩定性和系統性能。

       這里建立了一個簡單的LED燈閃爍控制任務,其代碼如下:
 

 

       一個簡單的LED燈閃爍控制任務

       加載后,LED燈閃爍控制正常,則測試成功,內核正常運轉,若測試出現問題,就要認真找出問題所在,不可忽略硬件的問題,還有編譯器等,當然也可以采用其他的測試,如串口的測試等。

       5 結語

       以上所述為μC/OS-Ⅱ在ARM7上移植的通用方法,但針對不同的處理器還需要作適當的修改,RTOS是當今嵌入式應用的熱點,應用RTOS,可以提高產品的可靠性,降低研發周期,其中μC/OS-Ⅱ具有很好的實時性和很小的代碼量,占用空間少,執行效率高,移植方法相對簡單,因此掌握μC/OS-Ⅱ的移植方法是相當重要的。



 

關于μC/OS-II系列軟件版權的說明

Micrium 公司產品包括μC/OS-II,μC/GUIuC/FS,μC/TC P-IP,μC/USB等。Micrium 公司提供嵌入式系統應用方面的產品,并對其軟件擁有知識產權。Micrium花費了大量的時間和財力為嵌入式領域提供高質量的軟件產品。所有上述產品都以源代碼的形式提供給客戶,具有極大的適用性。產品不是免費軟件,也不是開放源碼的軟件,因此,不能免費使用,需要清楚的闡明μC/OS-II和系列的軟件不是開放源碼的免費軟件,這是和Linux完全不一樣的。

 

開發和研究者可以通過購買Micrium公司的Jean先生的μC/OS-II的書籍,而得到μC/OS-II源代碼,但是僅可以作為個人和學校學習使用,所有和μC/OS-II直接和間接相關的商業目的行為,必須購買使用μC/OS-II及系列產品的商業授權,包括芯片/單板/系統廠家的任何參考設計,教學設備和最終的產品,如果沒有得到Micrium公司Jean先生簽字的合法授權都是不合法的使用, 這在μC/OS-II的書籍Micrium公司(www.micrium.com)和中國代理商-北京麥克泰軟件公司網站(www.bmrtech.com)上面中有明確規定。

 

Micrium公司其它軟件如μC/GUI,μC/FS,μC/TCP-IPμC/USB 等的銷售模式與μC/OS-II不同,如果沒有購買使用授權,完全不可以擁有該源代碼,也不能將源代碼用于產品的設計,培訓,教學和生產。

μC/OS-II, μC/GUIμC/FS,μC/TCP-IP,μC/USB 等授權方式有:單個產品、產品線(系列)、按照CPU 劃分的產品三種形式,μC/OS-KA,μC/OS-VIEW 等工具是按照使用人的數目收取費用的,相對起傳統的RTOS 動輒2-3萬美圓的開發費用和每塊單板的使用費(根據數量從數百到幾個美圓),μC/OS-II及系列產品是采用一次性的收費方式,應該只是大約相當于傳統RTOS 10-20% 的總體費用。

如果您正在將μC/OS-II系列軟件用于您的產品,您需要購買并獲得正式使用授權。

 

北京麥克泰軟件技術有限公司


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          含羞草久久爱69一区| 国内外成人在线| 亚洲精品国产日韩| 激情综合视频| 国产精品手机视频| 另类专区欧美制服同性| 国产亚洲欧美另类一区二区三区| 欧美亚洲尤物久久| 亚洲在线国产日韩欧美| 国产精品大全| 国产精品视频成人| 亚洲国产高清在线| 91久久精品日日躁夜夜躁欧美| 久久久国产成人精品| 欧美日韩成人| 国产精品成人一区二区艾草| 在线播放日韩欧美| av不卡免费看| 午夜日韩在线观看| 欧美偷拍一区二区| 久久久久久久999| 亚洲日本无吗高清不卡| 国产亚洲人成网站在线观看| 久久亚洲影音av资源网| 久久亚洲春色中文字幕久久久| 久久精品亚洲一区| 欧美另类在线观看| 欧美三日本三级少妇三99| 国产美女精品在线| 亚洲黄色在线观看| 国际精品欧美精品| 亚洲黄色有码视频| 欧美成人免费网站| 国产精品久久久久久久久久妞妞| 国产精品欧美一区二区三区奶水| 久久本道综合色狠狠五月| 国产伦一区二区三区色一情| 韩国视频理论视频久久| 99国产精品99久久久久久| 国内精品视频在线播放| 精品动漫3d一区二区三区| 国产一区三区三区| 亚洲图片自拍偷拍| 女女同性女同一区二区三区91| 欧美日韩在线免费视频| 在线视频亚洲| 欧美成人午夜免费视在线看片| 永久免费毛片在线播放不卡| aaa亚洲精品一二三区| 亚洲欧美日韩人成在线播放| 国产精品成人一区二区| 久久精品国产一区二区三区| 国产亚洲网站| 在线一区亚洲| 巨乳诱惑日韩免费av| 欧美先锋影音| 在线国产精品一区| 久久天堂精品| 国产日韩视频| 99国产精品一区| 免费日韩一区二区| 欧美日本国产在线| 免费观看成人www动漫视频| 国产欧美精品一区二区三区介绍| 亚洲国产欧美国产综合一区| 国产一区二区三区日韩| 久久青青草综合| 亚洲欧美在线另类| 久久视频在线免费观看| 国产原创一区二区| 久久精品电影| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲人午夜精品免费| 国产午夜精品一区理论片飘花| 亚洲欧美国产精品专区久久| 欧美h视频在线| 红桃视频国产一区| 欧美人交a欧美精品| 久久午夜精品| 国产精品hd| 农夫在线精品视频免费观看| 亚洲国产一区在线| 久久成人资源| 最新亚洲一区| 国产精品高潮呻吟久久av黑人| 久久久久久日产精品| 欧美日韩在线一区| 国产精品一区=区| 欧美国产日韩一区二区| 免费亚洲网站| 欧美成人一区二区在线| 亚洲激精日韩激精欧美精品| 在线观看视频欧美| 久久久久国产精品一区三寸| 欧美福利电影在线观看| 国产精品99久久不卡二区| 国产偷久久久精品专区| 美女视频网站黄色亚洲| 最新中文字幕亚洲| 国产精品影视天天线| 亚洲伊人伊色伊影伊综合网| 国产精品日本欧美一区二区三区| 亚洲国语精品自产拍在线观看| 午夜久久久久久| 久久久久久婷| 国产精品一区一区| 一区二区毛片| 亚洲欧美三级伦理| 欧美精品成人一区二区在线观看| 欧美激情中文字幕一区二区| 久久人体大胆视频| 亚洲丰满在线| 亚洲欧美影院| 久久精品免费看| 亚洲激情成人网| 国产欧美日韩视频一区二区| 国产精品高清网站| 欧美午夜激情视频| 国内自拍视频一区二区三区| 尤物yw午夜国产精品视频| 午夜在线视频观看日韩17c| 99在线精品视频在线观看| 欧美一区二区三区免费观看视频| 日韩视频在线一区| 在线欧美视频| 国产日韩欧美不卡在线| 亚洲美女在线看| 一区二区三区久久精品| 国内精品免费在线观看| 亚洲乱码国产乱码精品精| 国产精品一区视频| 亚洲你懂的在线视频| 亚洲影音一区| 国产精品综合av一区二区国产馆| 欧美人成免费网站| 欧美午夜a级限制福利片| 久久久久久夜精品精品免费| 国产精品videosex极品| 国内外成人免费激情在线视频| 国产精品国产馆在线真实露脸| 在线日韩av永久免费观看| 国产精品一区二区三区成人| 欧美精品v国产精品v日韩精品| 亚洲一区三区视频在线观看| 欧美中日韩免费视频| 国产在线精品二区| 久久国产精品久久国产精品| 国产亚洲欧美一区在线观看| 欧美日韩亚洲国产一区| 欧美+亚洲+精品+三区| 欧美连裤袜在线视频| 欧美国产三区| 亚洲电影自拍| 黑人巨大精品欧美黑白配亚洲| 亚洲国产欧美国产综合一区| 国产精品ⅴa在线观看h| 一区二区三区高清在线| 欧美aⅴ一区二区三区视频| 欧美日韩国产成人高清视频| 亚洲高清自拍| 国产精品久久久久久久久久免费| 欧美精品在线看| 国产农村妇女毛片精品久久莱园子| 欧美日韩综合在线免费观看| 欧美大尺度在线| 免费亚洲视频| 欧美一区激情| 国产日韩亚洲欧美综合| 欧美日韩美女在线| 国产色产综合色产在线视频| 91久久精品国产91久久性色| 国产一区二三区| 欧美国产日韩亚洲一区| 亚洲人成网站999久久久综合| 亚洲一区观看| 国内一区二区三区| 欧美大片免费| 国产午夜精品理论片a级大结局| 国产精品国产三级国产aⅴ浪潮| 亚洲高清视频在线观看| 午夜伦欧美伦电影理论片| 国产老女人精品毛片久久| 娇妻被交换粗又大又硬视频欧美| 在线电影院国产精品| 精品动漫3d一区二区三区| 亚洲欧美日韩综合| 亚洲精品孕妇| 牛人盗摄一区二区三区视频| 99国内精品久久久久久久软件| 一区二区激情视频| 欧美日韩一区综合| 欧美一区不卡| 欧美一区国产在线| 国产精品视频精品| 亚洲国产毛片完整版| 亚洲第一在线综合网站| 午夜精品久久久久久久99黑人| 久久av一区二区三区亚洲| 裸体女人亚洲精品一区| 亚洲精品国产无天堂网2021| 一区二区在线视频播放| 欧美日韩国产小视频在线观看| 国产精品日本欧美一区二区三区| 欧美日韩不卡合集视频| 激情一区二区| 欧美日韩视频在线| 欧美日韩亚洲系列| 麻豆免费精品视频| 久久成人人人人精品欧| 欧美网站在线观看| 国产日韩在线看片| 欧美精品一区二区视频| 欧美专区日韩专区| 亚洲欧美日本视频在线观看| 久久久久久**毛片大全| 欧美日韩精品二区第二页| 亚洲女同在线| 亚洲精品久久久久久一区二区| 欧美视频免费在线观看| 国产一区91精品张津瑜| 中文高清一区| 日韩一二三区视频| 国色天香一区二区| 亚洲综合欧美日韩| 另类激情亚洲| 久久香蕉国产线看观看av| 亚洲欧洲av一区二区三区久久| 妖精成人www高清在线观看| 久久爱另类一区二区小说| 亚洲国产天堂久久国产91| 欧美黄色一级视频| 亚洲高清不卡一区| 亚洲欧洲一区二区在线观看| 国产精品乱人伦一区二区| 欧美freesex交免费视频| 韩日在线一区| 国产精品色网| 亚洲国产精品精华液网站| 久久亚洲精品中文字幕冲田杏梨| 午夜激情久久久| 国产精品一区二区a| 欧美午夜www高清视频| 在线免费观看日本欧美| 在线一区欧美| 欧美国产亚洲视频| 国产精品爱啪在线线免费观看| 欧美有码视频| 国产精品成人免费| 亚洲二区视频在线| 欧美日韩美女| 亚洲人成网站777色婷婷| 欧美日韩一区二区精品| 欧美女同视频| 亚洲综合精品四区| 欧美日韩久久不卡| 激情综合网址| 久久久99精品免费观看不卡| 欧美精品www在线观看| 亚洲综合精品一区二区| 久久av一区| 国产精品一区二区在线观看不卡| 久久精品二区亚洲w码| 欧美日韩另类国产亚洲欧美一级| 久久成人18免费网站| 国产性天天综合网| 欧美一区二区三区免费视| 一色屋精品视频在线观看网站| 99热免费精品在线观看| 久久一区中文字幕| 国产精品久久久久aaaa| 亚洲第一精品电影| 亚洲国内在线| 国产麻豆精品久久一二三| 国产真实精品久久二三区| 亚洲精品免费电影| 男人插女人欧美| 在线观看国产日韩| 久久久之久亚州精品露出| 欧美日韩国产精品一卡| 国产一区 二区 三区一级| 欧美专区中文字幕| 欧美精品日日鲁夜夜添| 欧美wwwwww| 性娇小13――14欧美| 国产乱子伦一区二区三区国色天香| 99精品福利视频| 欧美欧美午夜aⅴ在线观看| 久久九九全国免费精品观看| 欧美va天堂va视频va在线| 国产精品久久久久高潮| 欧美日韩卡一卡二| 亚洲嫩草精品久久| 欧美激情久久久久| 欧美午夜精品理论片a级大开眼界| 99re视频这里只有精品| 亚洲精品国产拍免费91在线| 国产一区二区三区成人欧美日韩在线观看| 伊人久久成人| 亚洲一区综合| 久久综合99re88久久爱| 国产精品久久久久毛片大屁完整版| 欧美成人福利视频| 老司机免费视频一区二区三区| 裸体丰满少妇做受久久99精品| 国产精品久久久久久久久婷婷| 欧美理论电影网| 亚洲区一区二区三区| 国产精品久久久久久久久久三级| 欧美日韩和欧美的一区二区| 国产精品福利片| 一区二区不卡在线视频 午夜欧美不卡'| 国产乱码精品一区二区三区五月婷| 国产午夜精品在线观看| 国产伦精品一区二区三区高清| 亚洲电影在线免费观看| 欧美视频一区二区三区…| 欧美777四色影视在线| 在线播放视频一区| 欧美一级久久久久久久大片| 中国成人亚色综合网站| 欧美国产另类| 久久一区二区三区四区五区| 巨乳诱惑日韩免费av| 欧美日韩国产一中文字不卡| 日韩视频一区二区三区在线播放免费观看| 国产美女在线精品免费观看| 一区二区三区日韩欧美| 久久香蕉国产线看观看网|