23.2 uCos-II移植
23.2.1 在工程中添加相應(yīng)的文件
(1)在工程目錄下建立UCOSII文件夾,并在該文件夾內(nèi)新建三個文件夾CONFIG,CORE和PORT
(2)將除了os_cfg_r.h和os_dbg_r.c這兩個文件以外的所有文件全部復(fù)制到CORE文件夾下
(3)在CONFIG文件夾中新建includes.h文件和os_cfg.h文件
(4)在PORT文件夾中新建os_cpu.h,os_cpu_a.asm,os_cpu_c.c這3個文件
(5)在工程中添加這三個目錄下的文件,如下圖所示。
注:不要把ucos-ii.c文件添加到UCOS-CORE分組中,否則會提示有重復(fù)定義錯誤。
23.2.2 文件修改
我們編譯工程后可以發(fā)現(xiàn)報了11個錯誤,但都是同一個錯誤,如下圖所示。
我們在移植的時候并沒有發(fā)現(xiàn)這個文件,那是因為我們并沒有用到這個文件,這個文件是在ucos-ii.h文件中引用的,我們跳轉(zhuǎn)到這個文件將其屏蔽掉。
注 :我們可以發(fā)現(xiàn)在修改的時候,文件雖然可以打開,但是修改不了,這是因為我們下載的源碼都被設(shè)置成了只讀模式,在工程中只讀文件會有一個鑰匙的標(biāo)志,這就需要我們將文件的只讀屬性去掉即可。
去掉只讀屬性之后,我們會發(fā)現(xiàn)項目中的文件上鑰匙標(biāo)志消失了,如下圖所示。
此時,我們就可以對文件內(nèi)容進行修改了。打開ucos_ii.h文件,屏蔽44行的文件引用,如下圖所示。
此時會發(fā)現(xiàn)報更多的錯誤,此時我們進行新建文件的修改。
(1)os_cpu_a.asm文件詳解
①這部分代碼主要用于定義外部變量,IMPORT表示這是一個外部變量,不是在本程序內(nèi)定義的,EXPORT則表示這些函數(shù)位于該文件內(nèi),供其他文件調(diào)用,類似于C語言中的extern關(guān)鍵字。
IMPORT OSRunning
IMPORT OSPrioCur
IMPORT OSPrioHighRdy
IMPORT OSTCBCur
IMPORT OSTCBHighRdy
IMPORT OSIntNesting
IMPORT OSIntExit
IMPORT OSTaskSwHook
EXPORT OSStartHighRdy
EXPORT OSCtxSw
EXPORT OSIntCtxSw
EXPORT OS_CPU_SR_Save
EXPORT OS_CPU_SR_Restore
EXPORT PendSV_Handler
②EQU和C語言中的define關(guān)鍵字一樣,用于宏定義,定義了一些寄存器的地址
NVIC_INT_CTRL EQU 0xE000ED04 ;中斷控制寄存器
NVIC_SYSPRI2 EQU 0xE000ED20 ;系統(tǒng)優(yōu)先級寄存器
NVIC_PENDSV_PRI EQU 0xFFFF0000 ;PendSV中斷和系統(tǒng)節(jié)拍中斷
NVIC_PENDSVSET EQU 0x10000000 ;觸發(fā)軟件中斷的值
PRESERVE8
AREA |.text|, CODE, READONLY
THUMB
③OS_CPU_SR_Save和OS_CPU_SR_Restore是用于開關(guān)中斷的匯編函數(shù),通過給PRIMASK寫1來關(guān)閉中斷,寫0來開啟中斷,這里也可以使用CPS指令來快速開關(guān)中斷
OS_CPU_SR_Save
MRS R0, PRIMASK ;讀取PRIMASK到R0,R0為返回值
CPSID I ;PRIMASK=1,關(guān)中斷(NMI和硬件FAULT可以響應(yīng))
BX LR ;返回
OS_CPU_SR_Restore
MSR PRIMASK, R0 ;讀取R0到PRIMASK中,R0為參數(shù)
BX LR ;返回
④OSStartHighRdy是由OSStart()調(diào)用,用來開啟多任務(wù),如果多任務(wù)開啟失敗就會進入OSStartHang函數(shù)中
OSStartHighRdy
LDR R4, =NVIC_SYSPRI2 ;設(shè)置PendSV優(yōu)先級
LDR R5, =NVIC_PENDSV_PRI
STR R5, [R4]
MOV R4, #0 ;設(shè)置PSP=0
MSR PSP, R4
LDR R4, =OSRunning ;設(shè)置OSRunning=1
MOV R5, #1
STRB R5, [R4]
;切換到最高優(yōu)先級的任務(wù)
LDR R4, =NVIC_INT_CTRL ;R4=NVIC_INT_CTRL
LDR R5, =NVIC_PENDSVSET ;R5=NVIC_PENDSVSET
STR R5, [R4]
CPSIE I ;開啟所有中斷
OSStartHang
B OSStartHang ;死循環(huán)
-
單片機
+關(guān)注
關(guān)注
6032文章
44521瀏覽量
633129 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6742瀏覽量
123194 -
uCOS-Ⅱ
+關(guān)注
關(guān)注
0文章
9瀏覽量
8585
發(fā)布評論請先 登錄
相關(guān)推薦
評論