请问STM32 C++类构造函数怎么修改才能实现全局变量的初始化呢?

2019-07-14 17:02发布

STM32F10X项目中使用了C++的特性,使用ARM-none-eabi-g++编译,程序可以正常运行。
问题: C++定义的全局变量,其类的构造函数不被执行,在构造函数中设置的变量值都无效(实际全部为0)。 当把全局变量改为函数内部的临时变量时,是有效的。
   猜想是因为程序写到FLASH上去了,全局变量都为0,而不考虑对应类的构造函数。
  需要怎么修改才能实现全局变量的初始化呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
7762642422d
1楼-- · 2019-07-14 22:40
你看下MDK-ARM中的手册,全局的C++类对象怎么会不被执行构造函数呢?
会不会是你C++编译属性没全部打开?
实在不行你可以显示执行构造函数或声明多个构造函数。
jsdfjsdfew
2楼-- · 2019-07-15 01:40
 精彩回答 2  元偷偷看……
fantasyo老时光
3楼-- · 2019-07-15 05:05
楼主很有想法啊。
zzw0719
4楼-- · 2019-07-15 06:47
顶一下                          
jsdfjsdfew
5楼-- · 2019-07-15 09:47
fantasyo老时光 发表于 2018-10-10 07:06
楼主很有想法啊。

一个项目中需要自已调用GCC,无法使用Keil., 而且GCC编译的东西比Keil小很多耶。
7762642422d
6楼-- · 2019-07-15 12:36
jsdfjsdfew 发表于 2018-10-10 06:49
本帖最后由 whg-421854 于 2015-7-25 09:05 编辑

我使用的ARM-NONE-EABI-G++ 的。当前情况只是全局的变量(类对象)不执行构造函数,而局部变量是可以执行的。C++编译器应该没有问题。

会不会是因为全局变量构造函数初始化会占用太多的时间,而GCC对此有相关的配置项(比如默认关闭全局的构造)?建议再看看GCC相关。
或者你调试下,在复位向量中就开始逐行看

一周热门 更多>