Я пишу код на C ++, который будет работать на микроконтроллере.В частности, целевой mcu является K22, и я использую для этого компилятор MCXpresso NXP.
Я заметил, что статические члены класса не инициализируются при запуске.Например, посмотрите код ниже:
class B {
public:
B() { std::cout << "Init B" << std::endl;}
};
class A {
public:
static B b;
static A *instance;
static A *getInstance() {
if (!instance) {
instance = new A;
}
return instance;
}
private:
A() {
std::cout << "Init A" << std::endl;
}
};
A* A::instance;
B A::b;
int main() {
return 0;
}
Если вы соберете это без каких-либо оптимизаций или чего-либо еще в обычной цели Linux и запустите его, вы увидите, что он выдаст Init B
, так как B - этостатический член, и он инициализируется кодом запуска libc.
Если я делаю то же самое в моем K22 mcu, я не вижу инициализации A :: b в любое время.И, конечно, если я получу доступ к A :: getInstance () -> b, b будет нулевым.
Вероятно, это вопрос для парней MCUXpresso, но является ли это общим ограничением, когда речь заходит о C ++ на микроконтроллерах?Может быть, мне нужен определенный файл запуска для C ++?
EDIT
Не удается скопировать файл запуска, так как он слишком большой.Во всяком случае, я получил его для примера проекта, и это data_init , bss_init разделы и тому подобное.