移植UCOS-II时堆栈增长方向的疑问

在文件OS_CPU.H
中,通过定义#define OS_STK_GROWTH 的值来确定栈增长方向。

但是问题来了
参考网上大家移植到AVR单片机时,写的是
#define OS_STK_GROWTH 1
然后看任哲老师编剧的《嵌入式实时操作系统UCOS-II原理及其应用》(第2版)
P207——在51单片机上移植写的也是
#define OS_STK_GROWTH 1

但是AVR的堆栈是向下增长
51单片机的堆栈是 向上增长

定义的值怎么会一样呢?

  原因:具体原因是51的指令集问题,采用外部模拟堆栈,参看

http://yunandwei.blog.163.com/blog/static/322879012007733225396/

ucos-II 移植

 

如果堆栈从内存高地址向低地址方向增长, 常量 OS_STK_GROWTH 应设为 1, 这在 OS 里是很明确的

51单片机的堆栈是 向上增长的,不应该设为1。
但是 由于 51 内部的RAM 太小, ucos51 使用外部 xdata 模拟 stack。采用向下方式处理任务栈。
所以, OS_STK_GROWTH 应该为 1

 

原文地址:https://www.cnblogs.com/kalo1111/p/3155840.html