¿Será posible escribir código en C ++ para microcontroladores PIC en el futuro?

9

¿Alguna vez será posible usar C ++ para codificar PIC? ¿Hay alguna limitación de hardware que nos impida utilizar C ++? ¿Cuánto aumentan 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 planes futuros o desarrollo en curso en esto?

    
pregunta hkBattousai

5 respuestas

17
  

¿Alguna vez será posible usar C ++ para codificar PIC?

Sí, es posible ahora. Para dsPIC, hay el IAR Systems C ++ Compiler (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 compilación, convierta C ++ a C, luego asigne C (de aspecto desagradable) a su compilador de C normal. Eche un vistazo a LLVM o Comeau's Compilador de C ++ que ambos hacen eso. Comeau solo cuesta $ 50, pero es probable que requiera cierto esfuerzo para que toda la cadena de herramientas y las bibliotecas funcionen correctamente.

  

¿Existe alguna limitación de hardware que nos impida utilizar C ++?

Respuesta corta, no, no hay limitaciones de hardware. Respuesta larga, C ++ ciertamente recomienda el uso de un montón y / o pila, con los que las MCU más pequeñas con RAM limitada tendrán dificultades.

¿Por qué luchan con un montón / pila? Por dos razones: A) muchas MCU tienen RAM limitada, no lo suficiente como para un montón, 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, me parece constructivo comparar C ++ con C. Las mismas preguntas se hicieron (y aún se hacen) acerca de C en una MCU. La gente solía rechazar 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 tienen que tener un poco de cuidado: no use malloc (), etc. y B) el compilador se ha 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 puede que no cree una pila. Algunos compiladores de C simplemente no le permiten escribir código de reingreso (recursivo) que absolutamente requiere una pila.

Sabiendo que es posible escribir C para una MCU, las mismas respuestas se aplican a la pregunta de escribir C ++ en una MCU. Mientras el compilador entienda las limitaciones del dispositivo de destino y el usuario también entienda el idioma, realmente no hay problema. En C ++, solo pagas por lo que usas. Es perfectamente posible escribir C ++ (con objetos y todo) que produce la salida exacta de asm que obtendrías si hubieses usado C.

Ahora, PIC32s ciertamente puede hacer frente a C ++. Tienen hasta 64kB de RAM y están basados en el núcleo MIPS, que es un procesador de 32 bits que ha crecido correctamente. Puede tratar con punteros y una pila, así como una PC. De hecho, hay PC basadas en los MIPS (o al menos, solía haber).

Lamentablemente, hay muchos malentendidos en torno a C ++. Incluso los programadores muy experimentados parecen no tener idea de cómo funciona el lenguaje. Consulte mi respuesta sobre por qué C ++ es adecuado para incrustados CPUs.

  

¿Cuánto aumentan 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 de C / C ++ para comparar el rendimiento de tiempo y espacio para varias 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 tu 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 en curso en esto?

Eso no lo sé. Sé que el compilador Microchip C32 es de código abierto, y puede descargar la fuente. También sé que alguien con quien trabajé encontró algunas instrucciones en línea y logró que el compilador compilara el código C ++. Pero dejó la compañía antes de que pudiera establecerme con una cadena de herramientas adecuada.

UPDATE

Microchip ahora tiene un compilador de C ++ disponible para su gama PIC32 de MCU incrustadas.

respondido por el Rocketmagnet
5
  

¿Cuánto aumentan el tamaño del archivo .hex generado y el tiempo de ejecución del programa cuando usamos C ++ en lugar de C?

Depende de las características que uses. Si utiliza las funciones orientadas a objetos centrales (métodos de clase +), es probable que tenga un efecto muy pequeño (nombres de funciones / variables modificadas por lo que la tabla de símbolos probablemente aumentará algo). Las plantillas tampoco deberían agregar mucho con un buen compilador.

Si te vuelves loco y entiendes cosas como la Biblioteca de plantillas estándar, y usas la asignación de memoria dinámica y las excepciones, es probable que te encuentres con el código.

    
respondido por el Jason S
4

Ya hay compiladores de c ++ para pic, por ejemplo, enlace

No he usado esto y no conozco nada más que lo que existe ...

    
respondido por el John Burton
1

Generalizando su pregunta de alguna manera, 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 ++ no fueran opciones integradas. A medida que los procesadores integrados se vuelven más rápidos y potentes, y a medida que 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 las aplicaciones c ++. Si se ajusta a la definición del procesador integrado clásico es otro tema.

    
respondido por el spearson
-1

Probablemente sí ... pero no debería de todos modos ... 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 incrustado. No pierdas tu tiempo.

  • si sabe cómo usar los punteros de función, etc. Puede codificar como C ++, no hay problema allí.
respondido por el Ktc

Lea otras preguntas en las etiquetas