Thursday, January 21, 2010

如何确定OS_STK_GROWTH

在移植uCOS的时候需要确定堆栈的增长方向,绝大多数的微处理器和微控制器的堆栈是从上往下长的。但是某些处理器是用另外一种方式工作的。μC/OS-Ⅱ被设计成两种情况都可以处理,只要在结构常量OS_STK_GROWTH中指定堆栈的生长方式就可以了。
OS_STK_GROWTH 为0 表示堆栈从下往上长。
OS_STK_GROWTH 为1 表示堆栈从上往下长。
当需要将uCOS移植到一个新的处理器上的时候需要知道堆栈的增长方向,可以通过查看处理器的架构手册来对于PUSH和POP指令的描述确定堆栈增长方向。比如,对于ARM系列处理器,在ARM Architecture Reference Manual里对PUSH指令的描述有如下一句:The end_address value is four less than the original value of SP,也就是说堆栈是从上往下增长的,入栈的时候地址减小了。
在x86平台的宏定义如下:
#define  OS_STK_GROWTH        1        /* Stack grows from HIGH to LOW memory on 80x86  */

No comments:

Post a Comment