《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 實時操作系統μC/OS-II在LPC2114上的移植
實時操作系統μC/OS-II在LPC2114上的移植
廖文良,褚藝斌,陳文薌
廈門大學 機電工程系,福建 廈門361005
摘要: 介紹了實時操作系統μC/OS-II的特點和內核結構,并實現了μC/OS-II在Philips嵌入式處理器LPC2114上的移植。
Abstract:
Key words :

摘   要: 介紹了實時操作系統μC/OS-II的特點和內核結構,并實現了μC/OS-II在Philips嵌入式處理器LPC2114上的移植
關鍵詞: μC/OS-II  LPC2114  移植

  作為一個實時內核,μC/OS從1992年開始為人們熟悉,到現在已經發展為μC/OS-II。μC/OS-II最多支持56個任務,其內核為占先式,即總是執行就緒態的優先級最高的任務,并支持Semaphore(信號量)、Mailbox(郵箱)、Message Queue(消息隊列)等多種常用的進程間通信機制。與大多數商用RTOS不同的是,μC/OS-II公開其全部源代碼,并可以免費獲得,對商業應用只收取少量的License費用。
  LPC2114是Philips公司開發的一款支持實時仿真和跟蹤的ARM7TDMI-S CPU,并嵌入了128KB的高速Flash存儲器。其內部集成了與片內存儲器控制器接口的ARM7局部總線、與中斷控制器接口的AMBA高性能總線(AHB)和連接片內外設功能的VLSI外設總線(VPB,ARM AMBA總線的兼容超集)。LPC2114將ARM7TDMI-S配置為小端(little-endian)字節順序。128位寬度的存儲器接口和獨特的加速結構使32位代碼能夠在最大時鐘頻率下運行。
  將μC/OS-II移植在LPC2119上不僅有益于ARM和μC/OS-II在車用控制器上的應用,其成果還可以用于其他嵌入式工業控制領域。本次移植中,使用CodeWarrior For ARM Developer Suite v1.2編譯調試環境。
1  μC/OS-II系統結構
  圖1為μC/OS-II的軟硬件體系結構。應用程序處于整個系統的頂層,每個任務都可以認為自己獨占了CPU,因而可以設計成為一個無限循環。μC/OS-II處理器無關的代碼提供了μC/OS-II的系統服務,應用程序可以使用這些API函數進行內存管理、任務間通信以及創建、刪除任務等。

  大部分μC/OS-II代碼是使用ANSI C語言編寫的,因此μC/OS-II的可移植性較好。盡管如此,仍然需要使用C和匯編語言寫一些處理器相關的代碼。μC/OS-II的移植需要滿足下列要求:(1)處理器的C編譯器可以產生可重入代碼。(2)可以使用C調用進入和退出Critical Code(臨界區代碼)。(3)處理器必須支持硬件中斷,并且需要一個定時中斷源。(4)處理器需要能夠容納一定數據的硬件堆棧。(5)處理器需要有能夠在CPU寄存器與內存和堆棧交換數據的指令。
  移植μC/OS-II的主要工作涉及處理器及編譯器相關代碼以及BSP的編寫。
2  μC/OS-II BSP的編寫
  BSP(板級支持包)是介于底層硬件和操作系統之間的軟件層次,它完成系統上電后最初的硬件和軟件初始化,并對底層硬件進行封裝,使得操作系統不再面對具體的硬件。
  為μC/OS-II編寫一個簡單的BSP的方法是:首先設置CPU內部寄存器和系統堆棧,并初始化堆棧指針,建立程序的運行和調用環境;然后使用C語言設置LPC2114向量中斷控制器、GPIO以及SRAM控制器,初始化串口(UART0)作為默認打印口,并向操作系統提供一些硬件相關例程和函數(如dprintf( )),以方便調試;在CPU、板級和程序自身初始化完成后,就可以把CPU的控制權交給操作系統了。
  LPC2114處理器支持七種類型的異常。異常出現后,CPU強制從異常類型對應的固定存儲地址開始執行程序,因此需要在程序頭建立起異常向量表,例如:
 

  向量從上到下依次為復位、未定義指令異常、軟件中斷、預取指令中止、預取數據中止、保留的異常、IRQ和FIQ。保留的異常向量位置所填的數據0xb9205f80是為了使向量表中所有的數據32位累加和為0。這個向量在ARM文件中標識為保留,該位置被Boot裝載程序用作有效的用戶程序關鍵字。當向量表中所有的數據累加為0(且外部硬件禁止進入ISP程序)時,Boot裝載程序將執行用戶程序。
  從異常向量表可知:芯片復位時程序會跳轉到標號Reset處。程序首先調用InitStack初始化各種模式的堆棧,然后調用TargetResetInit對系統進行基本的初始化,最后跳轉到ADS提供的啟動代碼__main。例如:
Reset
  BL InitStack
  BL TargetResetInit
  B__main
  同時在每個硬件時鐘到來后,μC/OS-II會在中斷服務例程中調用OSIntCtxSw( )進行任務調度。另外,當某個任務因等待資源而被掛起時,它可以自己主動放棄CPU,而沒有必要等到自己的時間片全都用完。這可以通過調用一個任務級的任務調度函數OSCtxSw( )來實現,其中相對復雜的是OSIntCtxSw( )。由于OSLickISR( )調用了 OSIntExit( ),OSIntExit( )又再次調用了OSIntCtxSw( ),如果進行任務切換,則二次調用都不會返回,而不同的C編譯器、不同的編譯選項處理C調用時對堆棧的使用也不盡相同。因此OSIntCtxSw( )是與編譯器相關的。在ADS編譯環境下,OSIntCtxSw的軟件流程如圖2所示。

3  μC/OS-II 任務堆棧初始化
  μC/OS-II中每個任務都有自己的任務堆棧。在任務創建初期由OSTaskStkInit( )初始化。初始化堆棧的目的就是模擬一次中斷。任務堆棧中保存了任務代碼的起始地址和一些CPU寄存器(初值是無關緊要的),這樣一旦條件滿足,就可以執行任務了。LPC2114在中斷發生時,會自動保存程序指針PC、狀態寄存器SR以及其他一些信息。圖3為針對LPC2114編程結構設計的堆棧結構。

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

4  μC/OS-II系統時鐘管理
  μC/OS-II需要在系統初始化時開始一個系統時鐘節拍,它是OS系統的時間基準。該時鐘節拍一般由時間中斷產生。LPC2114中可產生時鐘節拍的模塊很多,本次移植采用定時器0異常。因為它與外部中斷使用不同的異常向量,便于對異常事件的管理,有利于提高OS的穩定性。32位定時器TC的計數頻率由plck經過PR分頻控制得到,而定時器的啟動/停止、計數復位由TCR控制。當有捕獲事件或比較匹配事件發生時,IR會設置相關的中斷標志,若已打開中斷允許,則會產生中斷。
  本次移植設置系統時鐘頻率為11.0592MHz,代碼在時鐘初始化和每次進入定時器0異常時,將定時器0的計數器PWMTC設置為11.0592M/OS_TICKS_PER_SEC,這樣可使OS每秒鐘產生OS_TICKS_PER_SEC的時鐘節拍。
5  應用方法
  在使用移植后的OS時,用戶需要編寫自己的主程序main( ),其流程圖如圖4。在適當的初始化后即可啟動OS。

  另外,用戶需在TaskStart任務中啟動時鐘節拍,調用OS_StartInit( )函數初始化統計任務,創建所需的其他任務,最后調用OSTaskDel( )函數刪除TaskStart任務。OS在該函數調用結束后,會自動允許異常和中斷,OS正常運轉,不斷調度任務,響應中斷。
參考文獻
1   LABROSSE J J.μC/OS-II:the  Real Time Kernel.RS:R&D
     Books,1999
2   周立功.ARM微控制器基礎與實戰.北京:北京航空航天大學出版社,2003
3   Labrosse J著,邵貝貝譯.嵌入式實時操作系統μC/OS-II(第二版).北京:北京航空航天大學出版社,2003

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产亚洲综合在线| 亚洲高清资源| 久久综合一区二区| 午夜精品影院| 亚洲神马久久| 一区二区三区波多野结衣在线观看| 亚洲第一黄色| 久久av二区| 欧美影院视频| 久久精品夜色噜噜亚洲a∨ | 亚洲第一网站| 欧美在线看片| 久久成人一区二区| 久久成年人视频| 久久精品日产第一区二区| 久久福利影视| 亚洲高清免费| 亚洲日本欧美在线| 99精品国产在热久久婷婷| 一本大道久久精品懂色aⅴ | 亚洲一区尤物| 香蕉成人久久| 久久久蜜臀国产一区二区| 久久一二三四| 欧美激情一区二区在线 | 亚洲一级高清| 午夜久久久久| 亚洲福利av| 亚洲精品资源美女情侣酒店| 日韩亚洲一区在线播放| 99精品久久久| 亚洲综合日韩在线| 久久精品国产77777蜜臀| 久久女同精品一区二区| 免费高清在线一区| 欧美日韩国产一区二区| 国产精品国产三级国产普通话99 | 亚洲精品中文字幕在线| 在线亚洲欧美专区二区| 亚洲女ⅴideoshd黑人| 欧美一区二区视频在线观看2020| 欧美一区二区成人| 久久综合成人精品亚洲另类欧美 | 国产色视频一区| 亚洲二区在线视频| 99精品国产高清一区二区| 中文av一区二区| 国产精品久久久久久福利一牛影视| 欧美日韩一级视频| 国产欧美一区二区视频| 黄色在线一区| 99成人在线| 久久av在线| 一区二区三区视频在线观看| 亚欧成人在线| 欧美成年人视频| 国产精品高潮视频| 狠狠色丁香久久婷婷综合_中| 亚洲激精日韩激精欧美精品| 亚洲一区二区三区乱码aⅴ| 亚洲高清一二三区| 亚洲小视频在线观看| 久久夜色精品国产欧美乱极品| 欧美日韩国产影片| 国产综合自拍| 在线亚洲高清视频| 亚洲国产精选| 午夜视频久久久久久| 欧美多人爱爱视频网站| 国产日韩在线亚洲字幕中文| 亚洲激情综合| 欧美一进一出视频| 在线视频一区二区| 久久久人成影片一区二区三区观看 | 国产亚洲毛片| 一本色道久久88综合亚洲精品ⅰ | 91久久国产精品91久久性色| 亚洲免费影视| 欧美国产日韩一二三区| 国产免费成人av| 一区二区免费在线播放| 亚洲经典一区| 久久高清一区| 国产精品国码视频| 亚洲激情视频网| 欧美在线播放| 性视频1819p久久| 欧美体内she精视频在线观看| 伊人夜夜躁av伊人久久| 午夜久久久久久| 亚洲自拍偷拍视频| 欧美黄免费看| 激情欧美一区二区三区| 午夜精品久久久久久99热| 亚洲视频在线看| 欧美国产三区| 永久免费精品影视网站| 欧美有码在线观看视频| 先锋影院在线亚洲| 国产精品xxxxx| 日韩午夜免费| 一区二区三区四区精品| 欧美黄色成人网| 在线精品一区| 亚洲国产综合在线| 久久性色av| 国产主播一区二区| 午夜国产一区| 欧美一二三视频| 国产精品一区二区黑丝| 亚洲色在线视频| 亚洲一级高清| 欧美午夜视频在线观看| 一区二区激情视频| 在线视频日韩| 欧美日韩综合在线免费观看| 亚洲精品欧美日韩专区| 日韩一区二区精品葵司在线| 欧美大胆成人| 亚洲黄一区二区| 亚洲麻豆一区| 欧美日韩亚洲三区| 99精品视频免费全部在线| 99国产精品久久久久老师| 欧美肥婆bbw| 亚洲精品久久视频| 一区二区精品| 国产精品高潮粉嫩av| 亚洲一区二区日本| 校园春色国产精品| 国产精品一区二区三区成人| 午夜精品区一区二区三| 久久九九电影| 在线观看日韩国产| 亚洲精品美女| 欧美三级乱码| 亚洲综合999| 久久精品人人| 欲色影视综合吧| 亚洲美女在线看| 欧美日韩综合在线| 亚洲欧美日韩天堂| 久久亚洲影院| 亚洲精品少妇网址| 午夜精品久久久久久久99樱桃 | 欧美日本亚洲| 在线一区二区三区四区五区| 亚洲欧美一区在线| 国产性做久久久久久| 亚洲国产精品v| 欧美人在线视频| 亚洲一区免费网站| 久久久人成影片一区二区三区观看| 在线不卡a资源高清| 99re热这里只有精品免费视频| 国产精品国产三级国产aⅴ9色| 欧美一二三区精品| 蜜桃av一区二区在线观看| 99国内精品久久| 久久成人精品电影| 亚洲欧洲午夜| 欧美一级午夜免费电影| 加勒比av一区二区| 亚洲私人影院在线观看| 国产午夜久久| 一区二区国产日产| 国产一区二区高清不卡| 亚洲美女淫视频| 国产精品一区二区三区乱码 | 欧美人与禽性xxxxx杂性| 亚洲在线1234| 男女激情视频一区| 在线中文字幕不卡| 久久久久久69| 日韩一级片网址| 久久色在线观看| 日韩亚洲不卡在线| 久久免费视频这里只有精品| 日韩一级大片| 老色鬼精品视频在线观看播放| 99在线观看免费视频精品观看| 久久久999| 一区二区三区蜜桃网| 久久一区中文字幕| 亚洲午夜精品久久久久久浪潮| 免费观看一级特黄欧美大片| 亚洲一区二区高清| 欧美精品一区二区三区久久久竹菊| 午夜精品久久久久久久99樱桃| 欧美日韩精品| 亚洲国产乱码最新视频| 国产乱码精品| 亚洲深夜激情| 亚洲大胆av| 久久久久国内| 亚洲天堂成人在线观看| 欧美国产一区视频在线观看| 欧美一区午夜精品| 国产精品久久久一区二区三区| 亚洲精品自在久久|