¿Alguna vez será posible usar C ++ para codificar PIC?
Sí, es posible ahora. Para dsPIC, existe el compilador C ++ de IAR Systems (aunque es muy antiguo y no es compatible).
Otra opción es usar un convertidor de C ++ a C. Usando un paso previo a la construcción, convierta el C ++ a C, luego dele el (desagradable) C a su compilador de C normal. Eche un vistazo al LLVM o al compilador de C ++ de Comeau, que ambos hacen eso. Comeau's solo cuesta $ 50, pero probablemente tomará algún esfuerzo lograr que toda la cadena de herramientas y las bibliotecas funcionen correctamente.
¿Hay alguna limitación de hardware que nos impide usar C ++?
Respuesta corta, no, no hay limitaciones de hardware. Respuesta larga, C ++ ciertamente alienta el uso de un montón y / o pila, con el que lucharán las MCU más pequeñas con RAM limitada.
¿Por qué luchan con un montón / pila? Por dos razones: A) muchas MCU tienen RAM limitada, no lo suficiente para un montón ciertamente, y apenas lo suficiente para una pila. B) muchas MCU no manejan bien los punteros, por lo que el uso de variables en la pila realmente mata el rendimiento.
Cuando las personas preguntan sobre el uso de C ++ en una MCU, encuentro constructivo comparar C ++ con C. Las mismas preguntas se hicieron (y aún se preguntan) sobre C en una MCU. La gente solía negarse ante la idea. ¿Un lenguaje de alto nivel, en 256 bytes RAM MCU? Imposible. Pero ahora todos sabemos que es posible. He escrito C para un PIC12. No hay problema. Es posible porque A) los desarrolladores de software saben que deben tener un poco de cuidado: no use malloc (), etc. y B) el compilador ha sido escrito especialmente para la MCU. El compilador también tendrá mucho cuidado con la asignación de memoria, no intentará crear un montón y es posible que no cree una pila. Algunos compiladores de C simplemente no le permitirán escribir código reentrante (recursivo) que requiere absolutamente una pila.
Sabiendo que es posible escribir C para una MCU, las mismas respuestas se aplican a la cuestión de escribir C ++ en una MCU. Mientras el compilador comprenda las limitaciones del dispositivo de destino y el usuario también comprenda el idioma, realmente no hay problema. En C ++, solo paga por lo que usa. Es perfectamente posible escribir C ++ (con objetos y todo) que produzca la salida asm exacta que habría obtenido si hubiera usado C.
Ahora, los PIC32 ciertamente pueden hacer frente a C ++. Tienen hasta 64kB de RAM y se basan en el núcleo MIPS, que es un procesador de 32 bits debidamente desarrollado. Puede manejar punteros y una pila, así como una PC. De hecho, hay PC basadas en el MIPS (o al menos, solía haber).
Lamentablemente, hay tantos malentendidos en torno a C ++. Incluso los codificadores muy experimentados parecen no tener idea de cómo funciona el lenguaje. Vea mi respuesta sobre por qué C ++ es adecuado en CPU integradas.
¿Cuánto aumenta el tamaño del archivo .hex generado y el tiempo de ejecución del programa cuando usamos C ++ en lugar de C?
Como dije, puede que no haya diferencia. Bjarne Stroustrup hizo una comparación de un grupo de compiladores C / C ++ para comparar el rendimiento de tiempo y espacio para una serie de operaciones. Los resultados variaron ampliamente. ¡En algunos casos, el C ++ salió más lento y más grande, algunos casos más lento y más pequeño, o más rápido y más grande, e incluso más rápido y más pequeño! Entonces, la respuesta a su pregunta es que depende en gran medida del compilador, pero en general, no necesita hacer ninguna diferencia. Para obtener más detalles, consulte el Informe técnico sobre el rendimiento de C ++
¿Hay algún plan futuro o desarrollo continuo sobre esto?
Eso no lo se. Sé que el compilador Microchip C32 es de código abierto, y puede descargar la fuente. También sé que alguien con quien trabajé realmente encontró algunas instrucciones en línea y logró que el compilador compilara código C ++. Pero dejó la compañía antes de poder establecerme con una cadena de herramientas adecuada.
ACTUALIZAR
Microchip ahora tiene un compilador C ++ disponible para su gama PIC32 de MCU integradas.