¿Alguna vez será posible usar C ++ para codificar PIC? ¿Hay alguna limitación de hardware que nos impide usar C ++? ¿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? ¿Es prácticamente posible usar C ++ para los PIC actuales? ¿Hay algún plan futuro o desarrollo continuo sobre esto?
pic
c
development-tools
c++
hkBattousai
fuente
fuente
Respuestas:
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.
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.
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 ++
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.
fuente
Depende de las características que uses. Si usa las características centrales orientadas a objetos (clase + métodos), es probable que tenga muy poco efecto (variables / nombres de funciones alterados por más tiempo, por lo que la tabla de símbolos probablemente aumentará un poco). Las plantillas tampoco deberían agregar mucho con un buen compilador.
Si te vuelves loco y utilizas cosas como la Biblioteca de plantillas estándar, y usas asignación de memoria dinámica y excepciones, entonces es probable que te encuentres con una gran cantidad de código.
fuente
Ya hay compiladores de c ++ para pic, por ejemplo http://www.sourceboost.com/Products/BoostCpp/Overview.html
No he usado esto y no sé nada más que existe ...
fuente
Al generalizar un poco su pregunta, hay procesadores ARM creados para el mercado integrado que contienen una MMU (unidad de administración de memoria). El tamaño de la memoria y la asignación hicieron que los lenguajes como java y c ++ fueran malas opciones incrustadas. A medida que los procesadores integrados continúan volviéndose más rápidos y potentes, y la memoria se vuelve más densa y barata, las opciones de idioma disponibles para los ingenieros integrados cambian drásticamente. Un procesador ARM de 600MHz de 32 bits con MMU y una tarjeta Flash de 64G es un gran candidato para aplicaciones c ++. Si se ajusta a la definición del procesador integrado clásico es otro problema.
fuente
Probablemente sí ... pero de todos modos no deberías ... C es el lenguaje de incrustado y no hay ventajas de usar C ++. O más bien, las ventajas de C superan con creces las ventajas de C ++ para embebido. No pierdas tu tiempo.
fuente