開啓ucosii的移植之旅:數組
4.6.一、移植和硬件平臺的關係app
(1)只要是cortex-m3內核內核的soc移植差別都不大。函數
同內核同soc的不一樣開發板移植差別都不大。spa
不一樣內核的開發板移植難度大,找的官方移植的同內核版本爲起點。指針
移植的通常思路: 先找到相近的內核移植好的源碼。(官網裏找一個)調試
在開發環境上創建好工程模板後,將ucosii的核心代碼添加進去。而後編譯,解決報錯和警告。(在這裏咱們只是解決了語法錯誤,並不知道整個代碼具體幹了什麼事,本身是不清楚的)下載運行,並小幅修改代碼查看結果(驗證本身的想法),最後添加並調試項目須要的BSP,編寫並調試項目app部分。blog
4.6.2開始移植代碼ip
跟着朱老師實戰一下: 本身的板子是 STM32F103RCT6,建好工程模板。開發
編譯出錯3個錯誤。input
..\app\..\APP\includes.h(52): error: #5: cannot open source input file "stm32f10x_lib.h": No such file or directory
找不到"stm32f10x_lib.h"頭文件,由於老版本的緣故,實際上"stm32f10x_lib.h"裏邊包含了各個外設的頭文件。這個在新版本里沒有,可是咱們有"stm32f10x.h"
還有絕對路徑包含的問題,注意本身的文件名大小寫以及對錯。
.\Objects\project_template.axf: Error: L6200E: Symbol __ARM_use_no_argv multiply defined (by app.o and main.o).
.\Objects\project_template.axf: Error: L6200E: Symbol main multiply defined (by app.o and main.o). main函數重複了。咱們在user裏定義了main函數,而移植過來的app裏面也有main函數。
.\Objects\project_template.axf: Error: L6218E: Undefined symbol OS_CPU_SysTickInit (referred from app.o).
.\Objects\project_template.axf: Error: L6218E: Undefined symbol OS_CPU_PendSVHandler (referred from vectors.o).
把一些文件沒有添加進來。粗心形成的。 在這裏遇到vectors.s這是之前的啓動文件,如今用startup_stm32f10x_xx,,xx根據單片機的容量來選擇。代碼能夠編譯成功了。
4.6.3整理bsp部分:
實際移植髮現的問題:
stm32單片機硬件仿真時超過五個斷點就會全速運行不了。
本身對 OSTCBList的指針的理解有誤差:剛開始確實是OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]任務數組,按照元素下標依次鏈接(在TCB初始化函數中)可是每建立一個任務時(在此以前已經建立了兩個任務,)
在OSTCBint函數中 :
ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */ ptcb->OSTCBPrev = (OS_TCB *)0; if (OSTCBList != (OS_TCB *)0) { OSTCBList->OSTCBPrev = ptcb; } OSTCBList = ptcb;
OSTCBList保存的是是上一次的TCB的地址,因此每次OSTCBList