2013-11-27 4 views
1

Я использую ATMega32 uc с Atmel Studio 6. У меня есть код, который содержит оператор new. Когда я пытаюсь использовать его, он говорит, что он не определен, и я не знаю почему.Atmel Studio 6 нет новых и удаленных операторов для C++

Я искал что-то в Google, но пока не нашел ничего подходящего. Все, что я мог найти, это фрагменты кода, который определяет операторы new и delete, но я действительно не хочу работать таким образом. Также отсутствует nullptr.

Любые другие решения?

+0

Вы включили необходимый файл заголовка? – vishram0709

ответ

3

Возможно использование динамического управления памятью во встроенных ситуациях - вам просто нужно быть осторожным, как вы это делаете. В этом случае использование malloc() и free(), вероятно, будет проще, хотя для обеспечения совместимости вы можете определить их как new и delete. Хороший источник информации по этой теме закончился на уровне AVR Freaks.

Причина, по которой эти операторы не существуют, заключается в том, что AVR-GCC не полностью поддерживает C++, только ее части. Отчасти это связано с природой встроенного программирования - некоторые из более продвинутых функций C++ могут быстро пережевывать флеш-память и оперативную память. Аргумент C vs C++ на встроенных платформах является старым и часто нагретым, но обычно подходит к ситуации. Вот еще another forum topic по этому вопросу.

2

Это звучит как встроенный материал. Это не редкий случай, что вы можете использовать только C, а не C++.

В любом случае, new/delete - и malloc()/free() также - это не очень хорошая идея во встроенном мире. Ваша программа должна работать в любых обстоятельствах. Существует нет пути к сбою. Это всего лишь n.a. У вас нет консоли или файла журнала, чтобы написать сообщение, или если у вас их есть, никто не проверит его, никто не обработает ошибку. Вы можете мигать красным светодиодным индикатором, но в большинстве случаев это запрещено, например. нажатие на педаль тормоза должно приводить в действие тормоз, а не красный светодиод.

Вы должны настроить пулы фиксированного размера вместо динамического выделения/освобождения элементов, и у вас нет возможности не обрабатывать какой-либо возможный ввод. Ваш код будет заполнен «MAX _...».

+0

Да, но мне действительно нужно создать несколько классов. Я не знаю их чисел, поэтому я должен создавать их динамически. Я отправляю через последовательную конфигурацию контактов, и только в этот момент я буду знать, сколько (скажем,) светодиодов у меня будет. – tzortzik

+0

Предварительно назначьте максимальное количество вещей. Это похоже, вы знаете, стартапы: неудача рано. Если у вас около 30-40 вещей, предварительно выделите 50. Если нет памяти на 50, вам нужно найти решение: больший процессор, меньше функции (меньше свойства объекта). – ern0

+0

Я думал об этом, но дело в том, что у меня может быть около 7 различных процессов на каждом булавке, и у меня недостаточно места для 224 экземпляров. Сейчас у меня только два процесса, и они не занимают такое большое пространство, но они самые маленькие. – tzortzik

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