我有一个链接器命令文件,它将堆栈的顶部地址分配给变量
_stack = . + 0x80000;
我想在'c'程序中使用这个地址 - 我想将堆栈复制到另一个位置,然后在对RAM的原始存储区进行破坏性内存测试之前更新堆栈指针以指向新位置。
我发现如果我做了像
这样的事情extern u32 *_stack;
myFunction(_stack);
然后该函数似乎传递了存储在堆栈位置的值
lwz r3,0(r8)
而不是堆栈本身的地址。 有人可以帮忙吗?
答案 0 :(得分:5)
尝试
extern u32 _stack;
U32 * stackPtr;
stackPtr = &_stack;
答案 1 :(得分:1)
我认为最自然[即:正确]的方式来声明这是基于将堆栈视为内存中的数组的概念,堆栈指针是该数组中的位置:
extern U32 _stack[];
U32 *stackPtr;
stackPtr = _stack;
答案 2 :(得分:0)
myFunction(& _stack); 应该将myFunction传递给变量* _stack *的地址。 否则,它将传递变量 _stack 中包含的值。