實操性最強:uCOS-II移植到STM32上的詳細步驟;_第1頁
實操性最強:uCOS-II移植到STM32上的詳細步驟;_第2頁
實操性最強:uCOS-II移植到STM32上的詳細步驟;_第3頁
實操性最強:uCOS-II移植到STM32上的詳細步驟;_第4頁
實操性最強:uCOS-II移植到STM32上的詳細步驟;_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、前言:說點廢話,網(wǎng)上有很多關(guān)于uCOS-ii移植的文章,好多都是千篇一律,理論性很強,分析了一大堆虛頭巴腦的東西,真想問他們,你確定你分析的這些東西是需要你做的工作嗎?實操性嚴重欠缺。這方面我也走了很多彎路,下面就將自己的移植過程一步步的記錄下來,也給大家做做參考。首先,簡單總結(jié)一下移植的大概過程:(1) 去uC/OS-ii官網(wǎng)下載你要移植芯片CPU的相關(guān)案例,不一定完全對應(yīng),那就找相應(yīng)系列吧。(2) 編程環(huán)境一般有兩種,分別是IAR和MDK,這個根據(jù)你自己的編程環(huán)境進行下載。(3) 本案例需要將uC/OS-II 移植到STM32F103ZET6上,而我使用的編程環(huán)境是MDK,很遺憾,官網(wǎng)上提

2、供的案例是基于IAR的,所以要基于IAR的案例進行更改。(4) 使用MDK創(chuàng)建一個無操作系統(tǒng)的最簡單程序,確保這個程序能夠使用,這樣做的目的是為了一步步的排查錯誤,假如無操作系統(tǒng)時,都有錯誤,移植過程中也肯定會有編譯錯誤,那么在排查錯誤的時候也就增加了難度,不會寫物操作系統(tǒng)的簡單程序怎么辦。那就不要往下看了。(5) 移植的最大的改動主要有兩部分,一個是一些頭文件的增減,另外一個就是向量表中PendSV_Handler和SysTick_Handler的修改。這里我要吐槽一下,網(wǎng)上說了一大堆關(guān)于什么OS_CPU.H的更改還有各種函數(shù)的的分析,這都是扯淡。這些根本就不用移植者去修改,官網(wǎng)提供的案例都

3、已經(jīng)提供了,除非你選擇移植的CPU是比較偏的,那么這些東西需要移植者自己去編寫。好了,下面就開始詳細的記錄怎么去移植。一、 創(chuàng)建一個無操作系統(tǒng)的簡單裸板系統(tǒng)1 創(chuàng)建源文件工程文件夾,如下圖所示:其中文件夾“CMSIS”為內(nèi)核的接口,包含的文件如下圖文件夾STM32_StdPeriph為固件驅(qū)動文件夾,這個把STM32的固件全都添加進去即可。文件夾User為其他文件,如下圖所示:文件夾Output和List主要是放那些編譯產(chǎn)生的亂七八糟的文件,為了使工程代碼更加簡潔。2.使用MDK創(chuàng)建無操作系統(tǒng)工程項目,這一點就不一一說了,將創(chuàng)建后的工程項目文件樹截圖如下:這個時候還沒有main文件,那么創(chuàng)建一

4、個mian.c文檔即可,這里需要注意,創(chuàng)建main.c后,要將其添加到項目中才行,而不是簡單的保存。如下圖所示:、注意:main.c中要有一個mian函數(shù),否則編譯器會報錯提示你的。然后就是項目的配置,這個還是很重要的,下面分別說需要配置的地方:(1) Output選項如下: 這里面勾選了Create HEX File選項,同時將項目輸出放到了之前創(chuàng)建的Output文件夾。(2) List選項,將List產(chǎn)生的文件放入到之前創(chuàng)建的List文件夾中。(3) C/C+配置選項如下:其中Define選項中,填入:USE_STDPERIPH_DRIVER,STM32F10X_HD,這是告訴編譯器,使用

5、標準外設(shè),還有選擇的CPU類型,其中CPU類型需要根據(jù)你選擇移植的CPU進行適當?shù)母?。Include Paths是要包含的頭文件路徑,這個為了保險,將項目中的所有有.h的文件的文件夾都包含進去就可以了。4.Debug選項如下:,我使用的是Jlink進行燒寫調(diào)試,所以選擇了如圖所示,還要進行settings,如下:這里要勾選“Reset and Run”,這樣做的目的是,每當燒寫下載后,CPU進行復(fù)位并運行。5.Utilities選項設(shè)置如下所示:至此,配置完畢,編譯一下,沒有錯誤,創(chuàng)建一個簡單的點亮LED程序,驗證一下即可。備注說明:如果按照這個步驟操作,編譯,如果出現(xiàn)一些簡單的錯誤,比如沒

6、有main函數(shù),沒有發(fā)現(xiàn)某個頭文件,那么按照提示解決即可,但是如果發(fā)現(xiàn)了很多怪怪的編譯錯誤,比如說未定義u32,u8這些符號時,那就要注意一下了,有可能是MDK版本的問題,我在使用MDK低版本的時候,發(fā)現(xiàn)有問題,而使用高版本的時候就沒問題了,所以需要注意一下。二、 移植uC/OS-ii到STM32F10X上1. 首先在官網(wǎng)上下載基于STM32的移植工程案例,里面的移植文檔AN-1018中是作者寫的移植文檔,說的很詳細,想要移植的話,多看看這個文檔。2. 其中有張圖,非常重要,其實就是告訴了移植者要做的工作,如下圖所示:這個圖表達了什么信息呢,其實就是告訴移植者需要將那些文件移植到你的工程當中,

7、首先是uC/OS-ii的源文件,就是OS_CORE.C、OS_FLAG.C.ucos_ii.H這些文件,其實是uC/OS-ii的Port文件,包括4個,分別是OS_CPU_C.C,OS_CPU_A.ASM,OS_CPU.H,OS_DBG.C,還有是用戶應(yīng)用程序里的包含文件,這個里面不能照搬,選擇使用兩個文件,分別為OS_CFG.H和INCLUDES.H,其他三個,可以自己編寫,為什么不套用另外那三個呢,主要是因為那三個文件是針對官方開發(fā)板創(chuàng)建的任務(wù),里面包含的信息量太大,編譯的時候,肯定會有大量的錯誤(因為我們是一直到我們自己的板子),所以最好自己寫最簡單的,至于怎么寫,后面再詳細說,可以先建

8、2個空文件,分別是APP.C和APP_CFG.H,這兩個文件的含義很簡單,APP是自己的應(yīng)用程序C文件,APP_CFG.H是對我們自己的應(yīng)用程序做的配置文件,看到這里可能會有個疑問,APP_VECT.C文件怎么處理呢,答案是舍棄,因為官方提供的案例是自己寫啟動文件,APP_VECT.C文件是向量表,我們使用的是STM32固件庫里的啟動代碼,所以就不用使用了。BSP部分有兩個文件BSP.C和BSP.H,這個也建議直接舍棄,這個是官方文檔中針對他們的的開發(fā)板寫的一些底層的設(shè)備驅(qū)動,我們自己的開發(fā)板跟他們的不同,所以根本就沒必要要,至此,將剛剛分析的這些必須的文件加入到上面創(chuàng)建的無操作系統(tǒng)裸板程序中

9、,進行編譯??隙〞泻芏噱e誤,下面我們就一一的修改這些錯誤。添加到項目后的文件樹,如下圖所示:需要注意的是,這其中的app.c和app_cfg.h是自己創(chuàng)建的空的文件,而不是使用官網(wǎng)案例里提供的,如果非要使用官網(wǎng)里面的,那么只能不停的更正其中的錯誤啦。下面就是要修改錯誤的過程了。3. 修改os_cfg.h 這個是配置uCOS-ii系統(tǒng)功能的頭文件,根據(jù)自己的需要進行裁剪任務(wù)吧,我只做了一個修改,就是,禁用鉤子函數(shù),這是為了防止出現(xiàn)那些所謂的文檔中分析的要寫的那幾個鉤子函數(shù)出現(xiàn)錯誤,禁用鉤子函數(shù)了,也就不用寫鉤子函數(shù)了,其他的根據(jù)自己需要裁減吧。4. OS_CPU_A.ASM文件的修改 首先是修

10、改為這樣修改的目的,是因為MDK編程環(huán)境不認識PUBLIC,要用EXPORT. 其次是修改:為:這個也是因為編程環(huán)境的問題。5. 修改OS_DBG.C修改:為:,原因也是編程環(huán)境的問題。6. 修改啟動代碼這個步驟是移植的核心:上面說的其他的修改,都是一些附屬的格式方面的修改,而啟動代碼的修改才是移植的核心,這里簡單的分析2個問題,一是,什么叫移植,二是移植的操作系統(tǒng)如何能夠被我們的工程所應(yīng)用。所謂移植,打一個恰當?shù)谋扔髌鞴僖浦?,就是將A的器官移植到B身上,使A的器官能夠為B所用。所以移植絕對不是簡單的“復(fù)制”,不僅要放到你的工程項目中,更重要的是要能夠和你的項目建立聯(lián)系。那么uCOS-ii怎么

11、跟STM32建立聯(lián)系呢?uCOS-ii的核心作用就是任務(wù)調(diào)度,要使用STM32的一個特殊中斷PendSV,就是可掛起系統(tǒng)任務(wù)中斷,通過該中斷進行系統(tǒng)的調(diào)度。還有就是uCOS-ii需要一個基準時間,那么STM32中有一個專用的定時器,嘀嗒定時器SysTick,這個定時器,就是專為操作系統(tǒng)而設(shè)計的,通過這個滴答定時器給uCOS-ii提供一個時間基準,每隔固定的時間出發(fā)一個PendSV中斷,進行任務(wù)的調(diào)度。所以呢,在官方案例的移植文檔AN-1018中也特別提到這一點,要將啟動代碼中所有“PendSV_Handler”和“SysTick_Handler”,替換成“OS_CPU_PendSVHandle

12、r”和“OS_CPU_SysTickHandler”,這樣就相當于將uCOS-ii的“神經(jīng)”跟你的項目的“神經(jīng)”搭在了一起。7. 此時編譯,發(fā)現(xiàn)還有一個錯誤: 在uCOS-ii源碼中查找OS_TASK_TMR_PRIO定義,原來這個定義在源碼文件app_cfg.h中,如下所示: 比葫蘆畫瓢,復(fù)制到自己創(chuàng)建的那個空白app_cfg.h中。然后編譯,發(fā)現(xiàn)已經(jīng)還有的錯誤就是在includes.h中,說沒有包含一些的頭文件,這個把includes.h中對應(yīng)錯誤的那些包含頭文件代碼刪掉即可,這是因為我們沒有完全的使用官方案例中的所有文件。至此移植的修改工作告一段落,已經(jīng)完成。8. 創(chuàng)建任務(wù),驗證移植效果。 這個可以參照源代碼中APP.C進行創(chuàng)建任務(wù),在app_cfg.h中編寫各個任務(wù)的配置文件,這里需要注意的是,我們之前創(chuàng)建的裸板中已經(jīng)有main.c文件,其中已經(jīng)有main.c函數(shù),所以我們在app.c中就不必再創(chuàng)建main函數(shù)了,直接在main函數(shù)中初始化uCOS-ii,然后創(chuàng)建一個任務(wù),或者調(diào)用一個函數(shù),在這個任務(wù)或者函數(shù)中再創(chuàng)建需要的幾個任務(wù)即可。案例如下圖所示:其中需要注意的是,在創(chuàng)建的第一個任務(wù)里,一定要先初始化嘀嗒定時器,這個是仿照官方案例中的代碼格式寫的,直接使用OS_CPU_SysTickInit(),可能在編譯的時候,會發(fā)現(xiàn)這個嘀嗒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論