在这次项目中,程序从APP跳入BootLoader主要遇到两个问题,做个记录:
1、现象:跳入BootLoader后还没开始升级便重启
原因:APP程序中开启了独立看门狗,当跳入BootLoader时看门狗也继续计时,但并没有重新喂狗,因此导致跳入BootLoader后软件Reset重新进入APP;同时,这个reset也会导致蓝牙BAT引脚和PWR引脚短暂掉电,与APP连接的BLE也断掉,导致升级数据传输失败的问题。
解决办法:在BootLoader中添加喂狗程序或跳入BootLoader前把看门狗停掉(不过我开的独立看门狗暂时还没找到停掉的办法.......)
2、现象:从APP跳入BootLoader后,升级过程中程序死掉,打断点发现每次卡死在启动文件中的
B
ENDP
原因:跑到B ENDP一般是因为程序中发生了中断但却找不到中断入口函数,即没有写中断处理函数。排查本项目,发现APP中开启了一个IO口外部中断,但是跳入APP前没有DeInit回IO口的状态,当程序跳到BootLoader时IO口发生了外部中断但却找不到对应的处理函数因此出错。
解决办法:在APP跳入BootLoader前最好把中断都Disable掉,特别是配置了中断的IO口,记得DeInit以恢复默认状态