你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 C++类构造函数

[复制链接]
whg-421854 提问时间:2015-7-24 17:01 /
在STM32F10X项目中使用了C++的特性,使用arm-none-eabi-g++编译,程序可以正常运行。
问题: C++定义的全局变量,其类的构造函数不被执行,在构造函数中设置的变量值都无效(实际全部为0)。 当把全局变量改为函数内部的临时变量时,是有效的。
   猜想是因为程序写到FLASH上去了,全局变量都为0,而不考虑对应类的构造函数。
  需要怎么修改才能实现全局变量的初始化呢?

<
收藏 1 评论12 发布时间:2015-7-24 17:01

举报

12个回答
chifen 回答时间:2015-7-24 20:28:00
顶一下


moyanming2013 回答时间:2015-7-24 22:55:51
你看下MDK-ARM中的手册,全局的C++类对象怎么会不被执行构造函数呢?
会不会是你C++编译属性没全部打开?
实在不行你可以显示执行构造函数或声明多个构造函数。
whg-421854 回答时间:2015-7-25 08:34:47
本帖最后由 whg-421854 于 2015-7-25 09:05 编辑
moyanming2013 发表于 2015-7-24 22:55
你看下MDK-ARM中的手册,全局的C++类对象怎么会不被执行构造函数呢?
会不会是你C++编译属性没全部打开?
...

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

    没有有可能是全局变量给放到程序DATA段中,而不能执行其构造函数?
yanhaijian 回答时间:2015-7-25 11:55:42
楼主很有想法啊。
你好我好大家好! 回答时间:2015-7-25 15:23:07
顶一下                          
whg-421854 回答时间:2015-7-25 17:01:18
yanhaijian 发表于 2015-7-25 11:55
楼主很有想法啊。

一个项目中需要自已调用GCC,无法使用Keil., 而且GCC编译的东西比Keil小很多耶。
moyanming2013 回答时间:2015-7-25 21:01:19
whg-421854 发表于 2015-7-25 08:34
我使用的ARM-NONE-EABI-G++ 的。当前情况只是全局的变量(类对象)不执行构造函数,而局部变量是可以执行的 ...

会不会是因为全局变量构造函数初始化会占用太多的时间,而GCC对此有相关的配置项(比如默认关闭全局的构造)?建议再看看GCC相关。
或者你调试下,在复位向量中就开始逐行看
yanhaijian 回答时间:2015-7-26 15:34:52
whg-421854 发表于 2015-7-25 17:01
一个项目中需要自已调用GCC,无法使用Keil., 而且GCC编译的东西比Keil小很多耶。
...

不知道GCC中C库的部分是不是透明的。
逆风的沙 回答时间:2015-7-27 11:34:41
顶一下。
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版