我正在将许多C驱动程序集成到C ++集成的嵌入式项目中。 转向OOP方法后,我将函数和变量组织为类,每个类都代表一个系统模块。
声明全局对象,包括编译器RTS库启动代码,以在程序执行到达main()
之前使用其构造函数来构建它们。
这会延迟watchdog_timer的禁用功能,该功能是从main()
调用的,因此系统无法启动。
我有一个全局对象,其中包含其他对象作为成员,每个对象都有其非平凡的构造函数;从全局对象构造函数中停止看门狗计时器不起作用,但是,如果在第一个成员对象构造函数的开头执行相同的指令,这似乎可以。
让我们上一堂课:
class A
{
object B;
object C;
object D;
// ...
public:
A(void);
// ...
};
A::A()
{
Stop_WatchDog();
// ...
}
类似下面的代码将重现该问题:
A myContainerObject;
int main()
{
Stop_WatchDog();
}
除非我将B
更改为:
class B
{
// ...
public:
B(void);
// ...
}
B::B()
{
Stop_WatchDog();
// ...
}
这是可重现的行为,因此在这种情况下,我总是可以假设B
构造函数中的第一条指令是在程序的开始执行的?