打印
[ZLG-MCU]

C++构造函数是不是可以用来上电的时候读取非易失性存储器

[复制链接]
1413|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ATmega32L|  楼主 | 2008-1-31 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假如上电的时候需要读取非易失性存储器数据,
定义一个C++全局类对象,用它的构造函数取读取非易失性存储器数据。

全局类对象的构造函数是在main()函数之前调用,会不会存在问题?

相关帖子

沙发
ATmega32L|  楼主 | 2008-2-1 10:17 | 只看该作者

应该是可以的。

应该是可以的。 

C++在调用全局对象构造函数时,C环境已经建立,C++环境还未建立完整。 

构造函数不能调用其他全局对象以及任何直接或间接使用了其他全局对象的函数。 

可以认为,全局对象构造函数可以调用任何C全局变量和函数,但不一定能调用C++(非C)全局对象和函数。 

也就是说,如果读取非易失性存储器的函数只是C函数,就可以用构造函数上电时读取数据。

使用特权

评论回复
板凳
hotpower| | 2008-2-2 00:00 | 只看该作者

哈哈~~~你可以胡作非为的~~~

"全局类对象的构造函数是在main()函数之前调用."

此话对也不对...你可以不让构造函数先于main()前调用.

"构造函数不能调用其他全局对象以及任何直接或间接使用了其他全局对象的函数。"

此话对也不对...如果还为运行构造函数类的成员函数是可以调用另一个为运行
构造函数类的成员函数,假使这个被调用的成员函数与它自己的构造函数无关.

使用特权

评论回复
地板
ATmega32L|  楼主 | 2008-2-2 09:32 | 只看该作者

请问:如何让某个全局类的构造函数在main之后云行?

请问楼上:如何让某个全局类TA的构造函数在main之后云行,而其他全局类的构造函数在main之前运行?这样就可以保证全局类TA在运行构造函数之前,其他所有全局类都已构造完毕,可以放心使用。

"构造函数不能调用其他全局对象以及任何直接或间接使用了其他全局对象的函数。"
我是根据:
1.如果一个类还没有构造完整,就不应该使用它。
2.全局类的构造顺序很难判断。保险起见,假设是最坏的情况,其他全局类都没有构造完毕。

使用特权

评论回复
5
平常人| | 2008-2-2 09:36 | 只看该作者

云行?——很难! 人类要云行也是费了好大的周折

哇哈哈哈。。。。。。。。。。

使用特权

评论回复
6
hotpower| | 2008-2-6 04:21 | 只看该作者

哈哈~~~不要构造函数你玩C++为什么???

重载__cstart_call_ctors就可以不运行所有的构造函数~~~
哈哈~~~俺的IAR FOR ARM出了点问题,不能编译...
以下是我在IAR FOR 8051上做的实验~~~

extern "C" __root void __cstart_call_ctors(void)
{
}

若想不运行构造函数有2个方法.
1.把此类加__no_init修饰.但这个好象只对IAR FOR AVR有效.
2.类就不要构造函数~~~

至于构造函数运行的顺序和定义次序一样~~~

使用特权

评论回复
7
hotpower| | 2008-2-6 04:31 | 只看该作者

除string外,俺觉得析构函数在工控中没必要,特别是flash编程中.

使用特权

评论回复
8
hotpower| | 2008-2-8 04:59 | 只看该作者

刚装了IAR FOR ARM,重载__cstart_call_ctors()无用

看来IAR的各个环境有很大的差异,要具体应用才知道.

总之俺认为C++不要构造函数是不对的~~~

没有楼主说得问题~~~因为各个类的构造是不应该牵扯其他类的构造的~~~

如果有则认为楼主在设计上有问题~~~

再者类的定义可以是受控的~~~构造函数的运行次序与类的定义次序是一致的.

否则类的构造函数次序不可控,那就别玩C++了~~~因为楼主的问题就常在了~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

376

帖子

0

粉丝