μC/OS-II 在 TMS320LF2407 中的移植
**大部分和 240 的移植相同,但有几个地方要注意。刚刚开始学,献丑了,希望能起到抛砖
引玉的的作用。
**如有疑问可以写信 E-mail:dsptju@163.com
赵峰
1. 在 TMS320LF2407 上的移植
(1)堆栈的构造
堆栈的构造是移植工作的重点,也是难点。由于 TMS320LF2407 只有 8 级的硬件堆栈,
任何超出 8 次的压栈都会使数据丢失。
为了移植方便,采用了系统库函数 I$$SAVE 和 I$$RSET 函数来保护/恢复现场、保护/
恢复任务栈,可以参看 240 的移植:
堆栈示意图
ST1
AR3
PL
PH
T
ACCL
ACCH
ST0
AR0
AR2
AR4
AR5
AR6
AR7
硬件堆栈
任务地址
返回地址
参数
AR1
硬件堆栈
I$$SAVE:
LARP AR1
ADRK 1 ; 跳过栈顶
.if NO_SHADOW
SST1 *+ ; 存状态寄存器
SST *+
SACH *+ ; 存32位ACC
SACL *+
.endif
ROVM ; 改变溢出模式
SPM 0 ;乘法移位寄存器置零
.if NO_SHADOW
SPH *+ ; 存P寄存器
SPL *+
MPYK 1 ; 存T寄存器
SPL *+
.endif ; NO_SHADOW
SAR AR0,*+ ; 存辅助寄存器
SAR AR2,*+
SAR AR3,*+
SAR AR4,*+
SAR AR5,*+
SAR AR6,*+
SAR AR7,*+
POPD * ; 从硬件堆栈弹出此函数自身的返回地址
LAC * ; 函数自身的返回地址放到ACC
RPTK 6 ;存硬件堆栈
POPD *+
BACC ; 返回
- 1 -