0

编辑:通过生成 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 完全相同的工具链,因此这不是工具链问题。
特此规避此问题,但我仍然想了解可能发生的情况。

4

1 回答 1

0

据我尝试,从 Atollic (TrueStudio) 构建时会导致此 DFU 问题和应用程序未重新启动。

从 CubeMX生成Makefile 项目解决了这个问题,但我仍然无法解释原因。

于 2019-04-23T06:54:38.633 回答