对于一个产品来说,通常为了维护产品,保护产品的可靠性,我们往往产品的设计中加入升级通道,在产品运行出现问题,我们可以升级其固件,修改遇到的bug,解决问题。最近调试程序突然发现MCU无法正常启动,正常情况下,MCU可以正常启动,从boot跳转到app,在测试过程中发现无法启动,找了很久,分析原因得到MCU无法启动是因为产品在运行上电过程中,由于数据通道有数据进来导致MCU无法正常进入APP,就是带流启动,现象是运行指示灯亮的很慢。周末两天仔细分析得到,MCU的boot中我们使用了接收中断,由于我的硬件没有预留外部器件判断是否需要升级,所以通过启动一定时间内判断是否收到升级指令来进入升级界面。正是由于这个接收中断在带流启动中一直进入中断,导致无法喂狗,看门狗复位,就这样一直循环,导致跳转失败,带流启动失败。所以我改为查询接收,这样就算有数据来也不会一直进入中断,避免一直进入在中断,通过这种方式成功解决带流启动失败。
总结:带流启动过程中,MCU的boot中串口采用查询接收,可以通过检查到正确的升级指令后再打开串口的中断收发。避免一开始采用中断接收导致MCU带流启动失败。
本帖最后由 qwerghf 于 2016-12-11 21:58 编辑
boot中就使用接收中断,
通常不是boot完成后,在初始设置 包括中断设置后, 才能使用各种中断和外设吗?