你好!
我现在在做CORTEX-M4的BOOTLOAD,参考的是TI的例程(StellarisWare\boot_loader),有以下几点疑问:
1. 在链接文件中:
GROUP
{
.bss
.stack
} run = SRAM, RUN_START(bss_run), RUN_END(bss_end), SIZE(bss_size), RUN_END(__STACK_TOP)
上面的指示中,bbs_end和__STACK_TOP指示的地址是不是一样的?(如果一样的话,为什么汇编中还要加入如下语句:
.ref __STACK_TOP
bss_end .word __STACK_TOP
2. 在把flash里面的数据搬移到ram的时候,ram的开始地址是如何确定的?为什么总是从SRAM (RWX)的origin指示的地址开始的?难道不会从bss_ end后面开始吗? (也就是先搬完flash的数据,在分配.bss和.stack,这是编译器自己默认的吗?)
先回答你第二个问题
把FLASH的boot搬到RAM中运行时,是搬运到RAM的起始地址即0X20000000,也就是RAM的前NK被分配来做BOOT的映射,当然,你想分配到任意地址都是可以的,前提是你定义的地址不要和堆栈冲突就行了。
如果我想把flash搬到其他地址,那应该如何做?对于堆栈,连接文件里不是设定为放在.bss后面了吗,为什么会出现冲突?
GROUP
{
.bss
.stack
} run = SRAM, RUN_START(bss_run),