ARM在UC/OS II的移植日记(连载8)
(2010-04-02 21:20:35)
__OSStartHighRdy
__OSStartHighRdy函数是在OSStartHighRdy()函数中调用的,__OSStartHighRdy
已经定义成了一个软件中断函数,即进入这个函数时是在管理模式中的
MSR CPSR_c, #(NoInt | SYS32Mode) ;
没有执行这条指令前是在管理模式,执行之后使系统进入系统模式并禁止IRQ中断,系统模式和用户模式使用相同的寄存器,但是它是特权模式
;告诉uC/OS-II自身已经运行
LDR R4, =OSRunning
OSRunning变量的地址存往R4
MOV R5, #1
R5的值置1
STRB R5, [R4] ;OSRunning = TRUE ,代表OS已经运行
R5的置存往R4指向的地址,即R4是一个指针,
OSRunning是uC/OS-II定义的变量,为1时代表uC/OS-II已经运行,否则为0
BL OSTaskSwHook ;调用钩子函数,用户自定义函数接口
目前,这个函数是一个空函数,不执行任何动作
LDR R6, =OSTCBHighRdy
OSTCBHighRdy变量的地址存往R6
LDR R6, [R6]
OSTCBHighRdy变量的值存往R6
OSTCBHighRdy 是一个优先级最高任务的任务控制块,是一个结构类型变量,它的第一个定义的参数是OS_STK *OSTCBStkPtr; OSTCBStkPtr是一个指向OS_STK类型的指针,.OSTCBStkPtr是指向当前任务栈顶的指针,故R6现在存的值是指向优先级最高的任务的栈顶的指针
B OSIntCtxSw_1 ;执行现场恢复的动作