首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CubeMx生成文件不正确

CubeMx生成文件不正确
EN

Stack Overflow用户
提问于 2020-09-17 01:04:49
回答 1查看 451关注 0票数 1

我想在VSCode环境下编写一个STM32F103VCT6微控制器。我安装了stm32-for-vscode扩展。我用CubeMx创建了一个带有Makefile工具链设置的项目。我可以用GNU ARM的编译程序编译这个代码。这个项目很简单,我只配置了晶体和串口调试。我的问题是,如果我闪烁的代码,晶体没有运行,我用我的示波器验证。如果我用CubeIde生成一个项目,并在那里编译它,它就会正常工作,水晶就会启动。两个项目中的C代码是相同的。

我的makefile有问题还是怎么的?

CubeMx project

EN

回答 1

Stack Overflow用户

发布于 2021-01-14 23:23:34

对于你的具体问题,我可能会迟到,但无论如何我都会留下答案的。

我遇到了同样的问题,即使使用不同的单片机(STM32F091RC),但我能够找到一个可能有帮助的解决方案。

首先,我意识到生成的二进制文件具有不同的大小。因此,我分析了CubeMX生成的Makefile和CubeIDE执行的编译步骤。两者之间有一些不同的编译标志,其中一个特别引起了我的注意:优化标志

我注意到,在CubeMX生成的Makefile中,标志被设置为-0g,根据文档它指示编译器执行以下操作:

代码语言:javascript
复制
Optimize debugging experience.
-Og should be the optimization level of choice for the standard edit-compile-debug cycle,
offering a reasonable level of optimization while maintaining fast compilation and a good
debugging experience. It is a better choice than -O0 for producing debuggable code because
some compiler passes that collect debug information are disabled at -O0.

尽管有最后一句话,我已经在过去的gcc代码优化方面遇到了问题。因此,我将该标志设置为-O0并重新编译了所有内容。请注意,我不需要调试任何东西,因此我不知道使用-O0而不是-Og是否真的影响调试体验,以及在多大程度上影响。

我刷新了生成的二进制文件(使用openocd),一切都正常工作。

关于stm32-for-vscode扩展的说明

请注意,尽管正确编辑了Makefile,此扩展仍将生成自己的Makefile,这将不会考虑我们之前所做的优化标志的更改。

此外,您不能只编辑从扩展生成的Makefile,因为它会在每次运行时重新生成它。

为了解决这个问题,我不得不下载扩展的源代码,并通过调整优化标志来重新编译它(另外,由于我有机会在make命令中添加-j选项,以加快编译速度)。

由于这超出了原始问题的范围,我不打算深入讨论细节,但根据您的需要,您可能根本不需要扩展(例如,如果您只需要编译、清理或将二进制文件闪存到板上)。

希望这一切都能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63924869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档