问题描述:
目前小弟正在做MSP430F2132的自升级程序,后半段放置升级程序,通过升级程序更新前半段的应用程序,但是在程序升级完毕后遇到一个问题,升级程序无法跳转到指定的入口,测试过三条指令:
asm(" MOV &0xF5FE, PC;");
asm(" br &0xF5FE;");
void (*ResetProgram)(void)=(void(*)())0xF5FE;
(*ResetProgram)();
这三条指令都无法跳转到指定地址,0xF5FE为应用程序的复位向量地址,
每次执行后都跳到未知地带,希望哪位高手能及时指点。
0xF5FE-0xF5FF为应用程序复位向量地址,这个地址存放的应该是主函数的入口地址,经常性跳转后就回到了0xFFFF处,使用(*ResetProgram)();单步执行后可以看到确实到了0xF5FE处,但是我声明的是指向函数的指针,他应该再跳到0xF5FE处存放的地址的指向位置才对,但是他没有跳转,而是直接执行到了0xF600,而用汇编指令无法跟踪到跳转,至看到是回到了0xFFFF
谢谢了,问题已经解决,原因为Bootloader里把中断给关掉了,而应用程序的中断开启的位置是不一样的。
问题解答:
跳法没问题呀?每次都是跳到同一个错误地址还是随机地址。0xF5FE-0xF5FF里的向量值有没有高低位写反