Visual studio code CubeMx makefile不正确

Visual studio code CubeMx makefile不正确,visual-studio-code,makefile,stm32,Visual Studio Code,Makefile,Stm32,我想在VSCode环境中编程一个STM32F103VCT6微控制器。我为vscode扩展安装了stm32。我使用带有Makefile工具链设置的CubeMx创建了一个项目。我可以用GNU ARM gcc编译器编译代码。该项目非常简单,我只配置了晶体和串行调试。 我的问题是,如果我闪烁的代码晶体没有运行,我验证了我的示波器。如果我用CubeIde生成一个项目,并在那里编译它,它工作得很好,水晶就会启动。两个项目中的C代码是相同的 我的makefile有问题还是怎么了 我可能会因为你的具体问题而迟到

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

我的makefile有问题还是怎么了


我可能会因为你的具体问题而迟到,但无论如何我都会留下一个答案

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

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

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

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
),一切正常

关于vscode扩展的stm32的说明 请注意,尽管正确编辑了Makefile,但此扩展将生成自己的Makefile,这不会考虑我们之前所做的优化标志中的更改

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

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

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


希望这一切都有帮助

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

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

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

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

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
),一切正常

关于vscode扩展的stm32的说明 请注意,尽管正确编辑了Makefile,但此扩展将生成自己的Makefile,这不会考虑我们之前所做的优化标志中的更改

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

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

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

希望这一切都有帮助