移植μC/OS-Ⅱ到嵌入式处理器上必须满足以下几个条件:
(1)处理器的C 语言编译器能产生可重入代码
μC/OS-Ⅱ是多任务内核,函数可能会被多个任务调用。 代码的可重入性是保证完成多任务的基础。 可重入代码指的是可以被多个任务同时调用,而不会破坏数据的一段代码,或者说,代码具有在执行过程中打断后再次被调用的能力。
下面列举了两个函数例子,它们的区别在于变量temp 保存的位置不同,左边的函数中temp 作为全局变量存在,右边的函数中temp 作为函数的局部变量存在,因此,左边的函数是不可重入的,而右边的函数是可以重入的。
此外,除了在C 语言程序中使用局部变量以外,还需要C 语言编译器的支持,使用Embest IDE for ARM 的集成开发环境,可以生成可重入的代码。
(2)用C 语言就可以打开和关闭中断
ARM 处理器核包含一个CPSR 寄存器,该寄存器包括一个全局的中断禁止位,控制它可以打开和关闭中断。
(3)处理器支持中断并且能产生定时中断(www.xing528.com)
μC/OS-Ⅱ是通过处理器产生的定时器中断来实现多任务之间调度的。 ARM7TDMI 的处理器都支持中断并能产生定时器中断。
(4)处理器支持能够容纳一定量数据的硬件堆栈
对于一些只有10 根地址线的8 位控制器,芯片最多可访问1 KB 存储单元,这样的条件下移植是比较困难的。
(5)处理器有将其他CPU 寄存器读出和存储的功能
μC/OS-Ⅱ进行任务调度时,会将当前任务的CPU 寄存器存放到此任务的堆栈中,然后再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。 因此,寄存器的入栈和出栈是μC/OS-Ⅱ多任务调度的基础。
ARM 处理器中汇编指令STMFD 可以将所有寄存器压栈,对应也有一个出栈的指令LDMFD。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。