Будет ли когда-нибудь возможно использовать C ++ для кодирования PIC? Существуют ли какие-либо аппаратные ограничения, которые мешают нам использовать C ++? Насколько увеличивается размер сгенерированного файла .hex и время выполнения программы, когда мы используем C ++ вместо C? Возможно ли практически использовать C ++ для текущих PIC? Есть ли какие-либо планы на будущее или постоянное развитие в этом направлении?
pic
c
development-tools
c++
hkBattousai
источник
источник
Ответы:
Да, это возможно сейчас. Для dsPIC есть компилятор IAR Systems C ++ (хотя он очень старый и не поддерживается).
Другой вариант - использовать конвертер C ++ в C. Используя шаг перед сборкой, преобразуйте C ++ в C, затем передайте (неприятно выглядящий) C обычному компилятору C. Взгляните на LLVM или компилятор Comeau's C ++, которые оба делают это. Comeau's стоит всего 50 долларов, но, возможно, потребуется некоторое усилие, чтобы весь инструментарий и библиотеки работали должным образом.
Короткий ответ, нет, аппаратных ограничений нет. Длинный ответ, C ++ определенно поощряет использование кучи и / или стека, с которыми будут бороться меньшие микроконтроллеры с ограниченным объемом ОЗУ.
Почему они борются с кучей / стеком? По двум причинам: A) многие микроконтроллеры имеют ограниченную оперативную память, которой явно недостаточно для кучи и едва хватает для стека. Б) многие микроконтроллеры плохо обрабатывают указатели, поэтому использование переменных в стеке действительно снижает производительность.
Когда люди спрашивают об использовании C ++ на MCU, я считаю, что конструктивно сравнивать C ++ с C. Точно такие же вопросы задавались (и остаются) по поводу C на MCU. Люди возражали против этой идеи. Язык высокого уровня, на 256-байтовой памяти MCU ?? Невозможно. Но теперь мы все знаем, что это возможно. Я написал C для PIC12. Нет проблем. Это возможно, потому что A) разработчики программного обеспечения знают, что они должны быть немного осторожнее: не используйте malloc () и т. Д. И B) компилятор был написан специально для MCU. Компилятор также будет очень осторожен с распределением памяти, он не будет пытаться создать кучу и может не создавать стек. Некоторые компиляторы C просто не позволяют писать реентерабельный (рекурсивный) код, для которого абсолютно необходим стек.
Зная, что можно написать C для MCU, те же ответы применимы к вопросу написания C ++ на MCU. Пока компилятор понимает ограничения целевого устройства, а пользователь также понимает язык, проблем на самом деле нет. В C ++ вы платите только за то, что используете. Вполне возможно написать C ++ (с объектами и всем остальным), который производит точный вывод asm, который вы получили бы, если бы использовали C.
Теперь PIC32, безусловно, может справиться с C ++. Они имеют до 64 КБ ОЗУ и основаны на ядре MIPS, которое является правильно выращенным 32-разрядным процессором. Он может иметь дело с указателями и стеком, а также с ПК. Действительно, есть компьютеры на базе MIPS (или, по крайней мере, раньше).
К сожалению, вокруг C ++ так много недоразумений. Кажется, даже очень опытные программисты понятия не имеют, как работает язык. Смотрите мой ответ о том, почему C ++ подходит для встроенных процессоров.
Как я уже сказал, не может быть никакой разницы. Бьярн Страуструп провел сравнение группы компиляторов C / C ++, чтобы сравнить производительность по времени и пространству для ряда операций. Результаты сильно различались. В некоторых случаях C ++ выходил медленнее и больше, в некоторых случаях медленнее и меньше, или быстрее и больше, и даже быстрее и меньше! Итак, ответ на ваш вопрос заключается в том, что он сильно зависит от компилятора, но в общем случае это вообще не должно иметь никакого значения. Для получения дополнительной информации см. Технический отчет о производительности C ++.
Это я не знаю. Я знаю, что компилятор Microchip C32 является открытым исходным кодом, и вы можете скачать исходный код. Я также знаю, что кто-то, с кем я работал, действительно нашел некоторые инструкции в Интернете и сумел заставить компилятор скомпилировать код C ++. Но он покинул компанию, прежде чем смог настроить меня с помощью надлежащей цепочки инструментов.
ОБНОВИТЬ
Теперь у Microchip есть компилятор C ++ для его встроенного микроконтроллера PIC32.
источник
Зависит от того, какие функции вы используете. Если вы используете базовые объектно-ориентированные функции (класс + методы), вероятно, они будут иметь очень незначительный эффект (искажение имен переменных / функций длиннее, поэтому таблица символов, вероятно, несколько увеличится). Шаблоны не должны добавлять много с хорошим компилятором, либо.
Если вы полностью сходите с ума и пользуетесь такими вещами, как Стандартная библиотека шаблонов, и используете динамическое распределение памяти и исключения, то вы, вероятно, столкнетесь с раздуванием кода.
источник
Уже есть компиляторы c ++ для pic, например, http://www.sourceboost.com/Products/BoostCpp/Overview.html.
Я не использовал это и ничего не знаю об этом, кроме как существует ...
источник
Несколько обобщая ваш вопрос, есть процессоры ARM, созданные для рынка встраиваемых систем, которые содержат MMU (блок управления памятью). Объем памяти и распределение делали такие языки, как java и c ++, плохим выбором. Поскольку встроенные процессоры продолжают становиться быстрее и мощнее, а память становится более плотной и дешевой, выбор языка, доступный для инженеров по встраиванию, резко меняется. 32-разрядный процессор ARM с тактовой частотой 600 МГц с MMU и картой памяти 64G является отличным кандидатом для приложений c ++. Подходит ли он под определение классического встроенного процессора - это другой вопрос.
источник
Наверное, да ... но все равно не следует ... C - это язык встраиваемых систем, и использование C ++ не дает никаких преимуществ. Или, скорее, преимущества C намного перевешивают преимущества C ++ для встраиваемых систем. Не трать свое время.
источник