stm32f4 bootloader 跳转到APP后死机问题

解决网络升级问题,其原因就是中断的问题,在bootloader程序中,我打开了systick和ETH中断,但是在APP中是没有的,如果在进入APP前不关闭这个中断(如果APP中没有用到的话),就会在APP中找不到中断入口从而导致死在B. 。之前我采用的用是在跳转前关闭总的中断,然后在APP中在开启总中断,并且要用这个关闭__set_PRIMASK(1); 不能用__disable_irq();这个(智嵌stm32f407), 但是效果是如果在APP中打开总中断__set_PRIMASK(0),则会死在APP中,如果不打开到没事,我degug发现就是死在了__set_PRIMASK(0)这个地方,说明就是中断的问题。智嵌给的两个网络升级例程我看了下,一个是LED的,他的APP就没有打开总中断,另一个APP本身就是网络,使用的中断是和APP一样的自然不会发生这个问题,所以我昨天想那就在跳转到APP前只关闭systick和ETH中断,在APP中不加__set_PRIMASK(0),在APP中使用什么中断就初始化即可,我在APP中使用了串口中断,测试发现可以了,跳转到APP后正常,发送串口指令可接受并能调回bootloader. 网上说的基本都是关闭和打开总的中断,感觉最好是用了什么就关闭什么中断。

 

其原理是,由于bootloader和app是共享ROM和RAM的,所以,如果在bootloader里打开了中断,而app里没有用到这个中断的话自然不会打开这个中断的入口,那么在app中就会应为找不到中断入口而导致死机,所以在跳转到app前应该关闭bootloader里使用而app里没有用到的中断,注意是关闭某一个外设的中断而不是使用__set_PRIMASK(0)去屏蔽中断,关某一外设中断和屏蔽中断不是一个概念.

你可能感兴趣的:(stm32f4 bootloader 跳转到APP后死机问题)