移植ucosII到STM32F103ZE(五)
os_cpu_a.asm
这个文件包含着必须用汇编写的代码。
EXTERN
OSRunning
; External references
EXTERN
OSPrioCur
EXTERN
OSPrioHighRdy
EXTERN
OSTCBCur
EXTERN
OSTCBHighRdy
EXTERN
OSIntNesting
EXTERN
OSIntExit
EXTERN
OSTaskSwHook
申明这些变量是在其他文件定义的,本文件只做引用(有几个好像并未引用,不过没有关系)。
EXPORT
OS_CPU_SR_Save
; Functions declared in this file
EXPORT
OS_CPU_SR_Restore
EXPORT
OSStartHighRdy
EXPORT
OSCtxSw
EXPORT
OSIntCtxSw
EXPORT
OS_CPU_PendSVHandler
; #0
#0这里 OS_CPU_PendSVHandler 要替换为PendSV_Handler;如下图:
替换后的 PPendSV中断
声明这些函数是在本文件中定义的。EXPORT这个关键字是跟编译器有关的,能被keil识别,但不能被IAR 识别。
NVIC_INT_CTTRL
EQU
0xE000ED04
;中断控制及状态寄存器 ICSR 的地址
NVIC_SYSPRI14
EQU
0xE000ED22
;PendSV优先级寄存器的地址
NVIC_PENDSV_PRI
EQU
00xFF
; PendSV 中断的优先级为 255(最低)
NVIC_PENDSVSET
EQU
0x10000000
; 位 28 为 1
;定义几个常量,类似 C 语言中的#define预处理指令。
S_CPU_SR_Save
MRS
R0, PRIMASK
;读取 PRIMASK 到R0 中,R0 为返回值
CPSID
I
;PRIMASK=1,关中断(NMI 和硬 fault 可以响应)
BX
LR
;返回
OS_CPU_SR_Restore
MSR
PRIMASK, R0
;读取 R0 到PRIMASK 中,R0 为参数
BX
LR
;返回
OSStartHighRdy()由 OSStart()调用,用来启动最高优先级任务,当然任务必须在OSStart()前已被创建。
OSStartHighRdy
这个文件包含着必须用汇编写的代码。
申明这些变量是在其他文件定义的,本文件只做引用(有几个好像并未引用,不过没有关系)。
替换后的 PPendSV中断
声明这些函数是在本文件中定义的。EXPORT这个关键字是跟编译器有关的,能被keil识别,但不能被IAR 识别。
NVIC_INT_CTTRL
NVIC_SYSPRI14
NVIC_PENDSV_PRI
NVIC_PENDSVSET
S_CPU_SR_Save
OS_CPU_SR_Restore
OSStartHighRdy()由 OSStart()调用,用来启动最高优先级任务,当然任务必须在OSStart()前已被创建。
OSStartHighRdy