gcc - STM32 DFU 上传失败和 GCC 优化
问题描述
编辑:通过生成 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 完全相同的工具链,因此这不是工具链问题。
特此规避此问题,但我仍然想了解可能发生的情况。
解决方案
据我尝试,从 Atollic (TrueStudio) 构建时会导致此 DFU 问题和应用程序未重新启动。
从 CubeMX生成Makefile 项目解决了这个问题,但我仍然无法解释原因。
推荐阅读
- c# - 最后一个位置总是从 ListView 中删除
- python - 连接数据框会创建太多列
- c# - 如何以及在 ASPNETCORE 3 中创建通用主机类扩展方法的良好做法?
- excel - 使用 VBA 制作数据透视表时,值字段不显示值
- python - 使用opencv和python抓取帧时如何保持恒定的FPS?
- java - 在android studio中播放另一个声音时停止播放声音
- scala - MapReduce 函数
- c++ - 如何修复 C++ 中的“无法将 char 转换为 char*”错误?
- asp.net - 正则表达式在 asp.net vb 中只允许一个特定的特殊字符和数字
- asp.net-mvc - vscode 调试返回“处理请求时发生未处理的异常”