我在做LPC1788在线上升级系统,我的方案是:自己开发一个上位机将keil编译好的APP的.hex文件读出来,并通过usb转CAN发到LPC1788的CAN上,然后调用芯片自带的IAP将数据写到Flash上,可是无法从IAP跳到APP,我的跳转方法是1、SCB->VTOR = APP_START_ADDR & 0x1FFFFF80; 2、 (*app)(); 可是没有跳过去成功执行APP(APP里面在让调试灯闪烁),谁来帮我解决这问题,赏金给谁了,我的qq:1223237156 邮箱:
1223237156@qq.com 万分感谢
执行跳转,可是程序跑去复位了
跳转后到复位,并不一定是因为跳转后复位,有可能是跳转后,执行某些代码导致复位,所以最好仿真看看,是那些代码导致复位的
可以用hex文件,hex文件按照hex文件的协议将数据读出来,这些数据就是bin文件的数据,也就是说hex文件有数据的地址信息、该行数据长度信息、数据类型信息、数据偏移地址信息、校检信息、以及用ascll表示的数据(bin中是用2进制表示),把hex文件的用ascll表示的数据转化为二进制,就是bin文件
谢谢版主,已经找到问题了,就是app编译前工程入口地址设置为零,结果程序跳过去后执行启动代码,而启动代码里面装着的复位中断函数入口地址刚好就是IAP的复位中断函数地址(是由入口地址设置为零造成的,如果设为APP的地址,那么这里装着的地址就是APP启动代码中正确的复位中断函数),如果不去认真剖析启动代码,就无法理解整个工程编译完后第一个数据(4byte)是栈的入口地址,第二个数据是复位中断入口地址,后面的是其他中断入口地址,程序都首先去执行复位中断入口地址,这个复位中断会执行一些系统性的函数(SystemInit),然后执行编译器自带的_main函数,_main函数会自动引导到我们写main()函数,这几天被这个跳转问题折腾的要命,但也令我学到了很多东西
一周热门 更多>