uC/OS-II实时操作系统在嵌入式平台上进行移植的一(2)
2017-08-25 01:49
导读:NOP5 由此可见,在CCS编译器的规则中,B15寄存器被用作堆栈指针,使用通用存取指令进行栈操作,而且堆栈指针必须以8字节为单位改变。 此外,B3寄存器被
NOP5
由此可见,在CCS编译器的规则中,B15寄存器被用作堆栈指针,使用通用存取指令进行栈操作,而且堆栈指针必须以8字节为单位改变。
此外,B3寄存器被用来保存函数调用时的返回地址,在函数执行之前需要入栈保护,直到函数返回前再出栈。
当然,CCS的C编译器对于每个通用寄存器都有约定的用途,但对于μC/OS-II的移植来说,了解以上信息就足够了。
最后,再编写一个用“interrupt”关键字声明的函数:
interruptvoidISR_TEMP(void)
{
inta;
a=0;
}
生成的ASM代码为:
_ISR_TEMP:
STWB4,*SP--(8)//入栈
NOP2
ZEROB4//---------
STWB4,* SP(4)//a=0
NOP2//----------
BIRP//中断返回
LDW* SP(8),B4//出栈
NOP4
与前一段代码相比,对于中断函数的编译,有两点不同:
●函数的返回地址不再使用B3寄存器,相应地也无需将B3入栈。(IRP寄存器能自动保存中断发生时的程序地址)
●编译器会自动统计中断函数所用到的寄存器,从而在中断一开始将他们全部入栈保护——例如上述程序段中,只用到了B4寄存器。
编写移植代码
在深入了解了系统核心与开发工具的基础上,真正编写移植代码的工作就相对比较简单了。
μC/OS-II自身的代码绝大部分都是用ANSIC编写的,而且代码的层次结构十分干净,与平台相关的移植代码仅仅存在于OS_CPU_A.ASM、OS_CPU_C.C以及OS_CPU.H这三个文件当中。
在移植的时候,结合前面两个步骤中已经掌握的信息,基本上按照《嵌入式实时操作系统μC/OS-II》一书的相关章节的指导来做就可以了。
但是,由于系统核心、开发工具的千差万别,在实际项目中,一般都会有一些处理方法上的不同,需要特别注意。以C6711的移植为例: