芯片是GD32F105RCT6,仿真中按步运行发现,一开始PC指针和R0就乱了,没想明白是为什么,没有思路太痛苦了.最近调MCU的OTA功能,测试时发现设备会异常的复位,而且复位的位置非常靠前,基本上一启动MCU外设的初始化还没跑完就复位了,今天发现一个更奇葩的现象,甚至连Reset_Handler都没跑完.
测试是这样设置的,因为有OTA功能所以分了BootLoader和APP两个部分,BootLoader一开始就检测要不要升级,不升级就转跳到APP部分,APP里设置了上电两分钟就调用while(1)来触发独立看门狗复位MCU,接稳压电源进行测试,这次大概是运行了一天吧,有台设备复现了这种异常复位的现象,接STLink在STM32 ST-LINK Utility内看PC指针的位置,发现指针位置很奇怪,指向了BootLoader程序的GPIO初始化函数,但是这次测试并没有触发OTA流程,程序应该直接转跳APP的,不应该跑到GPIO初始化这里面.利用keil仿真发现在BootLoader里面连Reset_Handler都没跑完,甚至第一个跳转到SystemInit()函数都没跳对,直接跳到一个UART相关的函数里面,然后从这个函数出来后也没用正确的跳转到main()里面,而且跳到GPIO初始化函数,并且在一个很奇怪的位置卡住了,接着应该是触发了看门狗或者其他复位机制直接复位了.
录了两个跑仿真的视频
异常:
正常:
|