最近调试LPC1788升级程序做一下几点备忘:
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
$K\ARM\BIN\ELFDWT.EXE !L BASEADDRESS(0x00000000)
Target
IROM1 : Start size
//ram 地址对其
__align(4) uint8_t SendData[512];
4、遇到问题一定要自己独立多想办法解决
参考链接:
http://blog.csdn.net/kennann/article/details/45541511