工作多年,常常觉得自己遇到的问题及解决办法,时间稍长,就容易遗忘,且没地方查。再者,经常看别人的文章,受益匪浅,自己也有些经验,却从来没有分享出来,深感惭愧。工作忙不是好借口,今日开始开博,不为别的,只为记录、备忘,以及解决其他人可能遇到的相同问题顺利找到解决办法。
问题:
stm32f103ret6上做的IAP,仿真调试阶段没有遇到过问题,外场使用就发现不能跳转到app,且不同板子、不同isp等都可能出现这种问题
解决:
直觉上是有规律的,一直找规律,经过一天试验、跟踪、bin代码对比,终于发现bin的最后一部分代码没有成功写入flash。
进一步分析iap的bootloader程序,果然最后不够整页的代码写入时指针不对,在已写入的区域,由于有代码且没擦除,不会执行编程操作,对已写入的部分没有影响,但是最后一部分程序丢失,当app启动运行时pc指针0xFFFFFFFF,进入硬件异常,修正指针后正常。其实增加写入代码验证会更利于debug。
附加问题:
1、bootloader、app是采用flash_loader_demo_v2.8.0,分两次写入flash
2、使用mcu isp可以使用网上的一个批处理文件合并之后,下载,也能运行
copy /b .\bootloader.hex+.\app.hex *-hb.hex
效果就是把app.hex拷贝到bootload