<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > uCOS-II在STM32上的移植步驟

          uCOS-II在STM32上的移植步驟

          作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏

          二、 移植uC/OS-ii到STM32F10X上
          1. 首先在官網(wǎng)上下載基于STM32的移植工程案例,里面的移植文檔AN-1018中是作者寫的移植文檔,說的很詳細(xì),想要移植的話,多看看這個(gè)文檔。
          2. 其中有張圖,非常重要,其實(shí)就是告訴了移植者要做的工作,如下圖所示:

          這個(gè)圖表達(dá)了什么信息呢,其實(shí)就是告訴移植者需要將那些文件移植到你的工程當(dāng)中,首先是uC/OS-ii的源文件,就是OS_CORE.C、OS_FLAG.C.....ucos_ii.H這些文件,其實(shí)是uC/OS-ii的Port文件,包括4個(gè),分別是OS_CPU_C.C,OS_CPU_A.ASM,OS_CPU.H,OS_DBG.C,還有是用戶應(yīng)用程序里的包含文件,這個(gè)里面不能照搬,選擇使用兩個(gè)文件,分別為OS_CFG.H和INCLUDES.H,其他三個(gè),可以自己編寫,為什么不套用另外那三個(gè)呢,主要是因?yàn)槟侨齻€(gè)文件是針對官方開發(fā)板創(chuàng)建的任務(wù),里面包含的信息量太大,編譯的時(shí)候,肯定會(huì)有大量的錯(cuò)誤(因?yàn)槲覀兪且恢钡轿覀冏约旱陌遄樱?,所以最好自己寫最簡單的,至于怎么寫,后面再詳?xì)說,可以先建2個(gè)空文件,分別是APP.C和APP_CFG.H,這兩個(gè)文件的含義很簡單,APP是自己的應(yīng)用程序C文件,APP_CFG.H是對我們自己的應(yīng)用程序做的配置文件,看到這里可能會(huì)有個(gè)疑問,APP_VECT.C文件怎么處理呢,答案是舍棄,因?yàn)楣俜教峁┑陌咐亲约簩憜?dòng)文件,APP_VECT.C文件是向量表,我們使用的是STM32固件庫里的啟動(dòng)代碼,所以就不用使用了。BSP部分有兩個(gè)文件BSP.C和BSP.H,這個(gè)也建議直接舍棄,這個(gè)是官方文檔中針對他們的的開發(fā)板寫的一些底層的設(shè)備驅(qū)動(dòng),我們自己的開發(fā)板跟他們的不同,所以根本就沒必要要,至此,將剛剛分析的這些必須的文件加入到上面創(chuàng)建的無操作系統(tǒng)裸板程序中,進(jìn)行編譯??隙〞?huì)有很多錯(cuò)誤,下面我們就一一的修改這些錯(cuò)誤。添加到項(xiàng)目后的文件樹,如下圖所示:

          需要注意的是,這其中的app.c和app_cfg.h是自己創(chuàng)建的空的文件,而不是使用官網(wǎng)案例里提供的,如果非要使用官網(wǎng)里面的,那么只能不停的更正其中的錯(cuò)誤啦。下面就是要修改錯(cuò)誤的過程了。
          3. 修改os_cfg.h 這個(gè)是配置uCOS-ii系統(tǒng)功能的頭文件,根據(jù)自己的需要進(jìn)行裁剪任務(wù)吧,我只做了一個(gè)修改,就是:
          #define OS_APP_HOOKS_EN 0
          ,禁用鉤子函數(shù),這是為了防止出現(xiàn)那些所謂的文檔中分析的要寫的那幾個(gè)鉤子函數(shù)出現(xiàn)錯(cuò)誤,禁用鉤子函數(shù)了,也就不用寫鉤子函數(shù)了,其他的根據(jù)自己需要裁減吧。
          4. OS_CPU_A.ASM文件的修改
          首先是修改

          這樣修改的目的,是因?yàn)镸DK編程環(huán)境不認(rèn)識PUBLIC,要用EXPORT.
          其次是修改:

          這個(gè)也是因?yàn)榫幊汰h(huán)境的問題。
          5. 修改OS_DBG.C
          修改:是編程環(huán)境的問題。
          6. 修改啟動(dòng)代碼
          這個(gè)步驟是移植的核心:上面說的其他的修改,都是一些附屬的格式方面的修改,而啟動(dòng)代碼的修改才是移植的核心,這里簡單的分析2個(gè)問題,一是,什么叫移植,二是移植的操作系統(tǒng)如何能夠被我們的工程所應(yīng)用。所謂移植,打一個(gè)恰當(dāng)?shù)谋扔?mdash;—器官移植,就是將A的器官移植到B身上,使A的器官能夠?yàn)锽所用。所以移植絕對不是簡單的“復(fù)制”,不僅要放到你的工程項(xiàng)目中,更重要的是要能夠和你的項(xiàng)目建立聯(lián)系。那么uCOS-ii怎么跟STM32建立聯(lián)系呢?
          uCOS-ii的核心作用就是任務(wù)調(diào)度,要使用STM32的一個(gè)特殊中斷——PendSV,就是可掛起系統(tǒng)任務(wù)中斷,通過該中斷進(jìn)行系統(tǒng)的調(diào)度。還有就是uCOS-ii需要一個(gè)基準(zhǔn)時(shí)間,那么STM32中有一個(gè)專用的定時(shí)器,嘀嗒定時(shí)器SysTick,這個(gè)定時(shí)器,就是專為操作系統(tǒng)而設(shè)計(jì)的,通過這個(gè)滴答定時(shí)器給uCOS-ii提供一個(gè)時(shí)間基準(zhǔn),每隔固定的時(shí)間出發(fā)一個(gè)PendSV中斷,進(jìn)行任務(wù)的調(diào)度。所以呢,在官方案例的移植文檔AN-1018中也特別提到這一點(diǎn),要將啟動(dòng)代碼中所有“PendSV_Handler”和“SysTick_Handler”,替換成“OS_CPU_PendSVHandler”和“OS_CPU_SysTickHandler”,這樣就相當(dāng)于將uCOS-ii的“神經(jīng)”跟你的項(xiàng)目的“神經(jīng)”搭在了一起。
          7. 此時(shí)編譯,發(fā)現(xiàn)還有一個(gè)錯(cuò)誤:
          未定義 OS_TASK_TMR_PRIO
          在uCOS-ii源碼中查找OS_TASK_TMR_PRIO定義,原來這個(gè)定義在源碼文件app_cfg.h中,如下所示:

          比葫蘆畫瓢,復(fù)制到自己創(chuàng)建的那個(gè)空白app_cfg.h中。然后編譯,發(fā)現(xiàn)已經(jīng)還有的錯(cuò)誤就是在includes.h中,說沒有包含一些的頭文件,這個(gè)把includes.h中對應(yīng)錯(cuò)誤的那些包含頭文件代碼刪掉即可,這是因?yàn)槲覀儧]有完全的使用官方案例中的所有文件。至此移植的修改工作告一段落,已經(jīng)完成。
          8. 創(chuàng)建任務(wù),驗(yàn)證移植效果。
          這個(gè)可以參照源代碼中APP.C進(jìn)行創(chuàng)建任務(wù),在app_cfg.h中編寫各個(gè)任務(wù)的配置文件,這里需要注意的是,我們之前創(chuàng)建的裸板中已經(jīng)有main.c文件,其中已經(jīng)有main.c函數(shù),所以我們在app.c中就不必再創(chuàng)建main函數(shù)了,直接在main函數(shù)中初始化uCOS-ii,然后創(chuàng)建一個(gè)任務(wù),或者調(diào)用一個(gè)函數(shù),在這個(gè)任務(wù)或者函數(shù)中再創(chuàng)建需要的幾個(gè)任務(wù)即可。案例如下圖所示:

          其中需要注意的是,在創(chuàng)建的第一個(gè)任務(wù)里,一定要先初始化嘀嗒定時(shí)器,這個(gè)是仿照官方案例中的代碼格式寫的,直接使用OS_CPU_SysTickInit(),可能在編譯的時(shí)候,會(huì)發(fā)現(xiàn)這個(gè)嘀嗒定時(shí)器初始化啟動(dòng)函數(shù)有報(bào)錯(cuò),這個(gè)一般是沒有包含這個(gè)函數(shù)中調(diào)用的函數(shù),或者直接沒有,那么在源代碼中搜索這個(gè)函數(shù),比葫蘆畫瓢照抄寫就行啦。
          另外特別注意,官網(wǎng)代碼的創(chuàng)建的第一個(gè)開始任務(wù)里有一段代碼,如下圖所示:

          這個(gè),調(diào)用了OSStatInit()函數(shù),這個(gè)函數(shù)的作用是啟動(dòng)統(tǒng)計(jì)CPU占用率的函數(shù),這個(gè)不太清楚還有沒有其他功能,建議不要使用,因?yàn)槲以谑褂玫臅r(shí)候,發(fā)現(xiàn),創(chuàng)建的任務(wù)都不能工作了,索性就不使用,反倒好了。

          上一頁 1 2 下一頁

          關(guān)鍵詞: uCOS-IISTM32移植步

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();