我正在将代码从STM32L0传输到STM32L4。该项目在L0上工作正常,但在使用其中一个功能的L4上运行正常,然后...在打开调试会话后,处理器立即陷入严重故障(我什至不必启动)程序,它将立即启动它并进入严重故障)。 奇怪的事情:
引起问题的函数实际上是__STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
中stm32l4xx_ll_spi.hex: SET_BIT(SPIx->CR1, SPI_CR1_SPE)
中的宏。
当我注释掉包含函数的那一行时,不会创建使用.s
的{{1}}文件。有了该功能后,它将从使用该功能的LL_SPI_Enable()
文件中创建一个.s
文件。
.c
函数存在于许多其他地方,很好。一个文件中只有我的一个函数(定义为静态内联LL_SPI_Enable()
)会导致这种奇怪的行为。还有其他功能使用相同的__attribute__((__always_inline__))
执行相同的操作(打开SPI),而这些都不是问题。看来我只有一个功能不能使用LL_SPI_Enable()
禁用SPI的功能不会引起任何问题。
该程序甚至连代码的第一行都没有命中,它立即陷入了严重故障。
我认为分散文件是问题所在,所以我为CPU使用了默认配置,结果是相同的。我还尝试了不同的优化级别,也没有任何变化。我没有来自编译器或链接器的任何错误。
有人有这样的东西吗?
答案 0 :(得分:2)
其中没有任何“怪异”。
如果您立即着陆(即在调用主函数之前),通常会出现三个问题:
在keil中,请参阅外围设备->核心外围设备->故障报告。
您将在其中看到发生HF的寄存器和地址以及其他信息(取决于实际的HF源)
进一步阅读:www.keil.com/appnotes/files/apnt209.pdf