我最近在做bootloader,现在应用程序仿真时会跑飞。
bootloader的程序,cmd文件分配地址时,vectors是从0x00000000开始的,即系统复位地址从0开始。
但是app程序的vectors地址我指向了其它位置,0x00180000,这样编译成功后,烧写程序后仿真,不能运行到main函数,程序直接跑飞。
我分析的原因是vectors的复位地址指向了其它位置而不是0x00000000,这样硬件复位后找不到入口,从而不能从_cint_00开始执行。
所以我的问题是:若将vectors地址指向其它位置,还需要配合什么其它的操作处理?
bootloader的cmd文件:
MEMORY
{
VECTORS (X) : origin=0x00000000 length=0x00000020
FLASH0 (RX) : origin=0x00000020 length=0x0017ffe0
//LS31x and RM48 Flash size is 0x300000
SRAM (RW) : origin=0x08002000 length=0x0002D000
STACK (RW) : origin=0x08000000 length=0x00002000
}
SECTIONS
{
.intvecs : {} > VECTORS
.text > FLASH0
.
const
> FLASH0
.cinit > FLASH0
.pinit > FLASH0
.data > SRAM
.bss > SRAM
}
MEMORY
{
VECTORS (X) : origin=0x00180000 length=0x00000020
FLASH1 (RX) : origin=0x00180020 length=0x0017ffe0
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0003EB00
}
/*----------------------------------------------------------------------------*/
/* Section Configuration */
SECTIONS
{
.intvecs : {} > VECTORS
.text : {} > FLASH1
.
const
: {} > FLASH1
.cinit : {} > FLASH1
.pinit : {} > FLASH1
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
}
Susan Yang:
若是可以的话,请您将您的工程发送上来或者私信给我。另外
请你先参考一下
e2e.ti.com/.../225447
Zhaohong Zhang的解答非常棒
,
user4581106:
工程需要整理下再发送给您。
抛开bootloader的问题,如果单纯的一个工程,若是VECTORS的地址不从0x00000000开始,如从0x00180000开始,需要哪些操作呢?
,
Susan Yang:
If the 0x18000 is used for VECTORS, the sys_intvecs.asm will be placed at 0x18000. This configuration doesn't work if there is only project in the flash. The reset vector should be placed at 0x00000000.
The main flash instruction memory is addressed starting at 0x00000000 by default. This is also the reset vector location – the ARM Cortex-R processor core starts execution from the reset vector address of 0x00000000 whenever the core gets reset.