1、程序运行地址跳转
__asm void JMP_Boot( uint32_t address )
{
LDR SP, [R0] ;Load new stack pointer address
LDR PC, [R0, #4] ;Load new program counter address
}
2、中断向量表重新映射目标地址 DestAddr
#define DestAddr 0x00000000
SCB->VTOR = DestAddr & 0x1FFFFF80;
3、flash地址跳转校验
uint8_t app_checksum_is_correct(void)
{
int i;
uint32_t cksum, *buff;
buff = (uint32_t *)NOR_FLASH_BASE;
//判断App程序的第一个跳转指令地址 是否是SDRAM的高位地址
if((buff[1] & SDRAM_BASE_ADDR) != SDRAM_BASE_ADDR)
return 0;
//以下是校验码算法,各位自己琢磨
cksum = 0;
for (i = 0; i < 7; ++i) {
cksum += buff[i];
}
cksum = (0xFFFFFFFF - cksum + 1);
//判断校验码是否符合要求,返回1 表示OK
return ((cksum == buff[7]) && (buff[7] != 0));
}
After Build/Rebuild
$KARMBINELFDWT.EXE !L BASEADDRESS(0x00000000)
Target
IROM1 : Start size
//ram 地址对其
__align(4) uint8_t SendData[512];
4、遇到问题一定要自己独立多想办法解决
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』