микроконтроллер — статические члены C ++ в микроконтроллере

Я пишу код на 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 ++?

РЕДАКТИРОВАТЬ

Не удалось скопировать файл запуска, так как он слишком большой. Во всяком случае, я получил его для примера проекта, и это data_init, bss_init разделы и тому подобное.

0

Решение

Исправлено путем переименования файла запуска startup_mk22f51212.c в startup_mk22f51212.cc так что компилятор C ++ его строит.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]