|
|
我是在自己的硬件板子上移植bootloader
运行stage1之后需要转入c代码调用stage2的main函数以进行后续的系统初始化工作。
但是main函数的堆栈指针sp的设置让我很迷茫,参考代码片段如下所示:
- @ get read to call C functions
- ldr sp, DW_STACK_START @ setup stack pointer
- mov fp, #0 @ no previous frame, so fp=0
- mov a2, #0 @ set argv to NULL
- bl main @ call main
复制代码
以上是开发板上bootloader中对应部分的代码,可是开发板的内存是64M,而我自己的板子内存设计只有32M,经过cpu内存管理映射过的内存起始地址为:0x30000000。DW_STACK_START的值是0x33de8000,0x02000000是32M,所以DW_STACK_START这个地址远超过32M内存的范围。我在移植测试中忘记了修改这个地址值,但是bootloader仍然可以正常运行!
所以我很奇怪——
1.是sp的设置无关紧要还是我对内存管理的理解有问题呢?
2.如果按照这个地址设置堆栈,那么就会覆写其他bank,这难道也没有问题么?
请大家不吝指教,谢谢~! |
|