Будет ли когда-нибудь возможно использовать C ++ для кодирования PIC?
Да, это возможно сейчас. Для dsPIC есть компилятор IAR Systems C ++ (хотя он очень старый и не поддерживается).
Другой вариант - использовать конвертер C ++ в C. Используя шаг перед сборкой, преобразуйте C ++ в C, затем передайте (неприятно выглядящий) C обычному компилятору C. Взгляните на LLVM или компилятор Comeau's C ++, которые оба делают это. Comeau's стоит всего 50 долларов, но, возможно, потребуется некоторое усилие, чтобы весь инструментарий и библиотеки работали должным образом.
Существуют ли какие-либо аппаратные ограничения, которые мешают нам использовать C ++?
Короткий ответ, нет, аппаратных ограничений нет. Длинный ответ, 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 ++ подходит для встроенных процессоров.
Насколько увеличивается размер сгенерированного файла .hex и время выполнения программы, когда мы используем C ++ вместо C?
Как я уже сказал, не может быть никакой разницы. Бьярн Страуструп провел сравнение группы компиляторов C / C ++, чтобы сравнить производительность по времени и пространству для ряда операций. Результаты сильно различались. В некоторых случаях C ++ выходил медленнее и больше, в некоторых случаях медленнее и меньше, или быстрее и больше, и даже быстрее и меньше! Итак, ответ на ваш вопрос заключается в том, что он сильно зависит от компилятора, но в общем случае это вообще не должно иметь никакого значения. Для получения дополнительной информации см. Технический отчет о производительности C ++.
Есть ли какие-либо планы на будущее или постоянное развитие в этом направлении?
Это я не знаю. Я знаю, что компилятор Microchip C32 является открытым исходным кодом, и вы можете скачать исходный код. Я также знаю, что кто-то, с кем я работал, действительно нашел некоторые инструкции в Интернете и сумел заставить компилятор скомпилировать код C ++. Но он покинул компанию, прежде чем смог настроить меня с помощью надлежащей цепочки инструментов.
ОБНОВИТЬ
Теперь у Microchip есть компилятор C ++ для его встроенного микроконтроллера PIC32.