2016-05-19 3 views
0

Я хотел создать новый встроенный проект с использованием MicroC OS-II и использовать C++.MicroC OS-II с C++

Когда я хочу создать экземпляр класса с использованием нового оператора, мой процессор запускается в исключение, которое, как представляется, происходит из-за сбоя вызова malloc в новом операторе. Это пример, который терпит неудачу:

testC* test = new testC(); 

с testC является некоторым классом с целочисленной переменной-членом. BTW, я использую Altera Nios 2.

После некоторого исследования я пришел к выводу, что malloc несовместим с RTOS. Поэтому мой вопрос: возможно ли использовать C++ с uC/OS-II? Или есть способ заменить вызов malloc в новом операторе?

До сих пор я не мог найти дополнительной информации об этом.

Большое спасибо за помощь. Best, Роман

+0

Из любопытства, почему вы используете 'new' во встроенной системе? Большинство встроенных систем имеют ограниченную память и не собирают мусор. Если вы собираетесь использовать 'new', вам придется решать проблемы фрагментации. –

+0

Ну, я хотел использовать C++ и создать OO-систему. И вот почему я требую нового оператора, не так ли? Я знаю, что нет gc, но это C++ вообще или я ошибаюсь? – RMK

+0

Имеет ли смысл использовать его таким образом или я должен изменить свою стратегию? – RMK

ответ

0

Я нашел решение, чтобы избежать нового оператора, сохраняя при этом полиморфизм (что фактическая причина использования new оператора). Я создаю объект в стеке (или где-то еще), например. с

TestC test = TestC(); 

и в реальный код, я ссылаться на базовый класс:

BaseC * base = &test; 

Может быть, это поможет кому-то еще. Спасибо всем.

+0

Если вам не нужен объект, который может быть изменен, он еще проще: 'BaseC const & base = TestC();'. – bipll

Смежные вопросы