最近做IAP升级,但是一直觉得程序下进去了(0x10000起的地址),但就是不运行新程序。我把写Flash的地方贴出:
// 进行 IAP 操作
#define APP_2_ADDR 0x10000
(xPackSize 大小为1024) (&tData[3] 是超级彖端的有限数据首地址)
zyIrqDisable();
ProgramPage(APP_2_ADDR+(RecPacketNum-1)*xPackSize, xPackSize, &tData[3]);
RecPacketNum++;
zyIrqEnable();
写是肯定写进去,因为我有对扇区读测试。
初步分析是中断向量问题,这些到底是怎么弄的,望高手指点呀!
此帖出自
小平头技术问答
最近也在做LPC11C24 的IAP online升級程式。
參考您寫的這段碼進行跳轉: (如使用function pointer跳轉會觸發"HardFault_Handler")
__asm void BootJump(u32 address)
{
LDR SP, [R0] // Load new stack pointer address
LDR PC, [R0, #4] // Load new program counter address
}
但是MDK 4.54顯示編譯錯誤如下: (用TKStudio4.6 也顯示相同錯誤)
error: A1875E: Register Rt must be from R0 to R7 in this instruction
經過測試,結果是SP 及 PC 不允許放在LDR的第一個欄位。
請問您是怎麼設定才能編譯過的?
一周热门 更多>