這邊需要寫一個IAP,于是在ld文件里面把項目的FLASH起始地址往后挪了0x4000
MEMORY
{
? ? BOOTFLASH (rx) :ORIGIN=0x00000000, LENGTH=16K
? ? FLASH (rx) :ORIGIN=0x00004000, LENGTH=176K
? ? RAM (xrw) :ORIGIN=0x20000000, LENGTH=128K
}
SECTIONS
{
? ? .bootapp:
? ? {
? ? ? ? _sbootappinit=.;
? ? ? ? .=ALIGN(4);
? ? ? ? KEEP(*(SORT_NONE(.bootapp)))
? ? ? ? .=ALIGN(4);
? ? ? ? _ebootappinit=.;
? ? } >BOOTFLASHAT>BOOTFLASH
? ? .init:
? ? {
? ? ? ? _sinit=.;
? ? ? ? .=ALIGN(4);
? ? ? ? KEEP(*(SORT_NONE(.init)))
? ? ? ? .=ALIGN(4);
? ? ? ? _einit=.;
? ? } >FLASHAT>FLASH
為了方便調(diào)試,在前面塞了個bootFLASH段,寫了個新的s文件.在BOOTFLASH段,里面只有一個j指令,跳到原本的地址:
? ? .section .bootapp,"ax",@progbits
? ? .global _boot
? ? .align ?1
_boot:
? ? j _start
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00000013
? ? .word0x00100073
但是實際調(diào)試發(fā)現(xiàn),這個跳轉根本不起作用,單步調(diào)試發(fā)現(xiàn)跳到了莫名其妙的地方去了.
改成
? ? lia6,0x4000
? ? jra6
也一樣的效果