基於STM32的μCOSⅢ系統移植的設計論文

基於STM32的μCOSⅢ系統移植的設計論文

  摘 要:隨著嵌入式系統產品漸漸完善,並在全世界各行業得到廣泛應用,透過移植嵌入式作業系統,計算機可以更好地管理記憶體,並且在很大程度上提高系統的實時性。文章主要介紹了μCOS-Ⅲ作業系統在基於ARM Contex-M3為核心的STM32處理器的移植要點,並且實現了原始碼公開的嵌入式實時作業系統μCOS-Ⅲ在STM32處理器上的成功移植。

  關鍵詞:μCOS-Ⅲ;STM32處理器;移植

  引言

  隨著人類社會經濟的不斷髮展,科研領域不斷的拓寬,嵌入式系統產品漸漸完善,並在全世界各行業得到廣泛應用。透過移植嵌入式作業系統,計算機可以更好的管理記憶體,並且在很大程度上實現了系統的實時性。μCOS-Ⅲ作為一個微型實時作業系統,包括了一個作業系統最基本的特性,使用匯編語言和C語言編寫的μCOS-Ⅲ的構思巧妙,結構簡潔精煉,可讀性很強,作為一個原始碼開放的嵌入式作業系統,使用者只要做很少的工作就可以把它進行移植和維護。

  1.1 實時作業系統μCOS-Ⅲ

  μCOS-Ⅲ是一個可以基於ROM執行的、可裁減的、搶佔式、實時多工核心,具有高度可移植性。所謂的移植,在一個平臺環境能夠成功執行的程式,將它搬運到另一個平臺環境,並且使其成功執行。發展至今的'μCOS-Ⅲ,特別適合於微處理器和控制器,並且已經移植到近40多種處理器體系上,涵蓋了從8位到64位的各種CPU。

  μCOS-Ⅲ原始碼可分為:與應用程式相關的檔案、與計算機硬體相關的檔案和系統核心的各種服務檔案。使用者在移植時,需要對與計算機硬體相關的檔案進行修改:如OS_CPU.H檔案,OS_CPU_A.ASM檔案和OS_CPU_C.C檔案。而系統核心的各種檔案,如:OS_CORE.C、OS_FLAG.C、OS_MBOX.C、OS_MUTEX.C等,與應用程式相關的檔案:INCLUDES.H和OS_CFG.H則不需要修改。

  ST公司針對STM32提供了STM32庫作為函式介面,使得開發人員得以脫離最底層的暫存器操作,有開發快速、易於閱讀、維護成本低等優點。

  2 μCOS-Ⅲ的移植

  2.1 修改OS_CPU.H檔案

  μCOS-Ⅲ的核心使用一個週期時鐘中斷,以計算任務延時時間和進行任務排程,在STM32中,這樣的時鐘中斷正適合由SysTick來提供。因為OS_CPU_SysTickHandler()函式與STM32庫所提供的stm32F10x_it.c檔案中的SycTick_Handler()函式功能一樣,都是使用SysTick的中斷處理,所以我們採用SycTick_Handler()函式。因此,相應的對於OS_CPU.H檔案的操作是:註釋掉OS_CPU_SysTickHandler()和OS_SysTickInit()函式的宣告。

  2.2 修改OS_CPU_C.C

  OS_CPU_SysTickHandler()和OS_CPU_SysTickInit()函式的定義在OS_CPU_C.C檔案中,由於我們採用了STM32官方庫提供的函式來對SysTick進行中斷處理,所以我們要把OS_CPU_C.C的OS_CPU_SysTickHandler()和OS_CPU_SysTickInit()這兩個函式註釋掉。

  2.3 修改OS_CPU_A.ASM檔案

  我們下載的μCOS-Ⅲ移植工程是在官方的IAR編譯環境下建立的,IAR在彙編的語法方面和我們使用的MDK編譯器有一點區別,所有我們對彙編檔案的部分指令做如下修改:在OS_CPU_A.ASM檔案中,將原來的PUBLIC指令改為EXPORT,它們是等價的。(見表1)

  2.4 修改CPU_A.ASM檔案

  在CPU_A.ASM彙編檔案中,仍有因編譯環境的不同而引起的錯誤,修改的方法同修改OS_CPU_A.ASM檔案一樣,將原來的PUBLIC指令改為EXPORT。除此之外,在CPU_A.ASM檔案中某些標號帶有冒號,如“CPU_CntLeadZeros:”、“CPU_RevBits:”、

  “CPU_WaitForInt:”和“CPU_WaitForExpect:”,為了適應編譯環境,需要將其中的冒號去掉。

  2.5 修改STM32F10X_IT.C檔案

  我們可以看到,在SysTick的函式中呼叫了3個函式,它們都是μCOS原始碼定義的函式,其基本功能如下:

  (1)OSIntEnter()函式,對用於表示中斷巢狀層的變數OSIntNesting加1,它與OSIntExit()函式成對出現,在進入中斷服務函式時,都應該包含這兩個函式,中斷服務的內容位於這兩個函式之間。

  (2)OSIntExit()函式,除了對巢狀層數OSIntNesting減1表示退出中斷外,還具有任務排程功能。

  (3)OSTimeTick()函式主要工作是對系統統計事件的變數OSTime加1,另外,它還會遍歷所有任務,對延時任務的時間減1。

  至此,我們對μCOS的原始碼針對編譯環境做了修改,將SysTick中斷修改到STM32所提供的STM32F10X_IT.C檔案後,就基本完成了μCOS的移植了。

  3 系統測試

  我們現在需要對移植好的程式碼做一個簡單的測試,透過編寫流水燈任務來驗證移植的成功。流水燈任務的部分程式碼如表3:

  執行後我們發現實驗板的流水燈按照迴圈的方式一直閃爍,驗證了μCOS-Ⅲ在STM32處理器核上的成功移植。

  4 結束語

  作為一個成熟的嵌入式作業系統,μCOS-Ⅲ已經被廣泛移植於各種體系的微型處理器上了。在嵌入式技術高速發展的今天,基於ARM為核心的微處理器憑藉ARM優秀的體系結構被運用於各種行業。透過研究μCOS-Ⅲ的移植,可以使得它在更廣泛的平臺得到應用,更促進嵌入式技術的發展。

  參考文獻

  [1]任哲.嵌入式作業系統基礎μC/OS-II和Linux(第2版)[M].北京:北京航空航天大學出版社,2011.

  [2]野火開發板配套資料.μC/OS-Ⅲ在STM32的移植詳解[Z].

  [3]Joseph Yiu.ARM Contex-M3 權威指南[M].宋巖,譯.北京:北京航空航天大學,2009.

  [4]許倫輝,修科鼎.基於ARM處理器的μCOS-II移植[J].科技廣場,2010.

  [6]鄧中亮,何雙亮.基於ARM的嵌入式作業系統μC/OS-II的移植研究[J].計算機技術與發展,2007.

最近訪問