2011-12-18 23 views
7

Duplicar posibles:
Is there any reason to use C instead of C++ for embedded development?microcontroladores utilizando C o C++

Tengo mucha curiosidad acerca de esto: ¿Por qué es que cuando nos ocupamos de los microcontroladores, prefieren C en lugar de C++ ? Basado en mis investigaciones, el lenguaje C y Assembly es el lenguaje de programación habitual para estos dispositivos. Solo sé C++ y Assembly Language. Entonces, en este caso, ¿debería empezar a aprender C o seguir con el lenguaje Assembly y, de ser así, qué compilador debería usar porque solo conozco el Turbo Assembler?

¡Gracias y más poder! :)

+1

Supongo que es porque C ha existido por más tiempo y es un lenguaje más simple que C++. Pero es una pregunta justa por qué los microcontroladores no han logrado, en general, soportar C++. –

Respuesta

2

C es de un nivel más bajo y hace exactamente lo que usted dice. Está más adaptado a entornos de bajos recursos como los microcontroladores.

C++ como algunas funciones que requieren recursos adicionales (como OOP, excepción, etc.).

Además, el microcontrolador no tiene las mismas funciones que la CPU de su computadora. Por ejemplo, podría no ser compatible con la carga de bibliotecas dinámicas e, incluso para bibliotecas estáticas, su tamaño es limitado ya que su chip no tiene mucha memoria.

Normalmente, los microcontroladores exponen una biblioteca de entrada/salida especial, y stdlib no siempre está disponible.

Lo que necesita es un compilador cruzado para su microcontrolador específicamente. Luego puede escribir su programa en C y ASM.

Si el chip lo admite, puede volver a compilar el stdlib para usar las características C estándar, y luego puede (una vez más si el chip tiene suficientes recursos) construir un compilador cruzado de C++ y luego el STL. Entonces podrá construir el programa C++ en su chip, pero el programa pesará mucho más que el programa C original.

10

Algunas funciones de C++, como las excepciones y las funciones virtuales, pueden agregar sobrecarga a su programa, lo cual es indeseable en entornos de recursos muy limitados. Esto reduce la demanda de compiladores C++ en dichas plataformas. También es mucho más difícil implementar un compilador de C++ que un compilador de C. Esta dificultad más la falta de demanda hace que muchos microcontroladores solo tengan compiladores de C disponibles para ellos.

Aprendería C para la programación de su microcontrolador. No es difícil aprender C después de aprender C++ y será mucho más fácil codificar que ensamblar.

3

Es simplemente un accidente histórico y la práctica (por los viejos Luddites como yo) que losucontrollers "prefieren" ASM y C. Si su compilador puede compilar C++ en el código ucontroller, no hay ninguna razón teórica que sepa por qué debería no use C++.

Para mí, es mucho más fácil y más natural usar ASM y C, pero puede usar el que prefiera siempre que su compilador (y el enlazador, si lo usa) pueda hacer lo correcto; y tu ucontroller tiene suficiente memoria para acomodar el código compilado C++ (quizás más grande).

2

Los microcontroladores son unidades de procesamiento limitadas de memoria y ancho de banda. El lenguaje de programación C genera un código apretado que se acerca al lenguaje ensamblador en términos de tamaño y velocidad. C++ generalmente lleva una sobrecarga en memoria y velocidad. Otro problema es la asignación dinámica de memoria. El uso de un diseño orientado a objetos con C++ generalmente implica la creación y destrucción dinámicas de objetos.Las aplicaciones integradas que usan microcontroladores normalmente asignan toda la memoria requerida estáticamente y no se libera durante el tiempo de vida de la aplicación.

Dicho esto, si está utilizando un microcontrolador de 32 bits y su aplicación es lo suficientemente compleja como para manejar gran cantidad de tráfico de datos o tiene una interfaz de usuario significativa a través de pantalla táctil, LCD, C++ (& veces incluso C#) es el idioma de elección

El compilador que elija dependerá del microcontrolador, consulte el sitio web del fabricante del microcontrolador para conocer el paquete de herramientas de desarrollo adecuado.

El lenguaje de ensamblaje se usa solo para las capas más bajas si no se puede hacer en C. Es más difícil de mantener y el código de idioma del ensamblado de puertos, por lo tanto, es mejor minimizar su uso en la aplicación.

2

Los microcontroladores son dispositivos pequeños que no son muy potentes en comparación con las computadoras. Ellos tienen recursos limitados. En primer lugar, el tamaño de la pila es muy limitado, por lo que no se recomienda tener muchas llamadas de función anidadas (en algunos dispositivos, la pila está limitada a unos pocos bytes). En segundo lugar, a menudo no es posible asignar dinámicamente la memoria (alloc, free ...), y la mayoría de los datos del programa deben ser variables estáticas globales o almacenados en la pila, por lo que las clases útiles como std::vector no estarían disponibles.

Incluso si los compiladores C++ se pueden utilizar para microcontroladores, no sería muy útil ya que las capacidades bajas de estos dispositivos prohibirían el uso simple de este poderoso lenguaje. El uso de C es a menudo más fácil para tareas simples, y los microcontroladores se dimensionan para tareas simples.

2

Es solo la disponibilidad de recursos, realmente, como se explica en los otros carteles. Para cuando hayas compilado en un par de tablas de métodos virtuales y un par de docenas de punteros de objetos, ¡eso es todo lo que la RAM ha pasado de ser un simple PC!

Dicho esto, prefiero C++ en los controladores de 32 bits de hoy con 8K de RAM, un montón de flash, periféricos integrados complejos y libs multitarea. Después de décadas de OO, usar plain C es una pesadilla para cualquier cosa que no sea trivial.

Actualmente uso chips NXP ARM & Rowley Crossworks, (IDE, usa gcc). Solo uso C para interfaces lib y ensamblador para algunos controladores, el resto es C++.