Zx阿旭的笔记 https://passport2.21ic.com/?781945 [收藏] [复制] [RSS]

日志

uCosII移植基础知识

已有 683 次阅读2012-3-21 13:15 |系统分类:嵌入式系统


uCosII移植基础知识(《uC/OS-II内核分析、移植与驱动程序开发》(陈是知))


所谓移植,就是使一个实时内核能在某个微处理器或微控制器上运行。




要使uc/osII正常运行,处理器必须满足以下要求:


1、 处理器的C变压器能产生可重入代码。(什么是可重入代码了?允许多个进程同时访问的代码


2、 C语言就可以打开和关闭中断。


3、 处理器支持中断,并且能产生定时中断(频率通常在10100Hz之间)。


4、 处理器能支持容纳一定量的数据存储硬件堆栈(可能是几千字节)。


5、 处理器包含将堆栈指针和其他CPU寄存器的内容读出并存储到堆栈或内存中的指令。




“堆”和“栈”是两个完全不同的概念,“堆栈”是我们的一种习惯叫法,如果没有特别说明,我们常说的“堆栈”其实是“栈”。(那么,“堆”和“栈”到底是什么了?)




有些资料将OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()称为函数,这是不正确的。因为宏与函数的区别非常明显,而且函数的调用与返回会伴随着对堆栈的操作,而宏仅仅是在编译的过程中进行字符串替换。在程序的编写过程中能采用宏定义完成时要尽量少采用函数,因为目前很多处理器都有流水线的功能,函数的调用会带来跳转,自然也就打断流水线,造成性能损失。




从移植的角度来说,编写OSTaskStkInit()函数有一定难度,原因在于涉及的知识点较多,工作较细。编写OSTaskStkInit()函数的第一步就是堆栈的设计,这是移植中的一大难点,大致需要考虑以下因素:


1、 CPU自动入栈的寄存器及压栈顺序。


2、 需要额外保存哪些寄存器。


3、 所采用的编译器对形式参数的传递方法。


4、 堆栈的增长方向。


5、 堆栈指针是指向下一个可用空间还是指向上次入栈数据。


6、 所采用的CPU是否存在系统堆栈。


7、 堆栈深度。


堆栈的构建没有绝对的规则或公式,最关键的还是要掌握CPU的结构和uCOSII的原理,灵活应用。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)