编辑:通过生成 Makefile 项目绕过了问题,但我仍然想知道发生了什么。
这个问题与我在此处提到的未解决问题相呼应(STM32 应用程序有时不运行,仍保留在 DFU 中)。
我有一个基于 STM32L486 的定制板,我正在使用内置 DFU 模式dfu-util
在 Linux 上通过 USB 上传新固件。
有时,出于未知原因,应用程序在退出 DFU 模式后无法启动。代码中的轻微更改可以使其工作或破坏它。(有关详细信息,请参阅上面的链接)。
可以扭转问题的更改示例:
- 添加/删除一个
HAL_Delay
或一个 LED 闪烁 - 数组大小 +1 或 -1
- 添加/删除
sprintf
格式
似乎可行的是通过Og
优化(或使用 STLink 工具和调试模式)构建二进制文件。
我试图增加堆和堆栈(最多为默认值的 20 倍),它不会改变任何东西。检查 Atollic 中的准备死代码/数据删除选项似乎使构建失败比其他时候更多。
什么可能导致应用程序无法启动,甚至没有启动步骤?如何追踪可能导致此问题的罪魁祸首?
这可能与内存对齐问题有关吗?
欢迎任何关于如何检查的想法/见解/评论。
我已经能够在 Nucleo 板上重现相同的问题(来自此处和我的其他链接)。
我试图从 CubeMX 生成一个Makefile 项目,但问题没有发生。我猜这是 Atollic 生成的二进制文件或 IDE 的编译器/链接器设置中的错误。
请注意,我的 Makefile 使用与 Atollic 完全相同的工具链,因此这不是工具链问题。
特此规避此问题,但我仍然想了解可能发生的情况。