La programación de un microprocesador usando C en Paradigma Orientado a Objetos, es aconsejable?

StackOverflow https://stackoverflow.com/questions/4546898

Pregunta

Desde C se utiliza comúnmente en micro-controladores y es posible hacer la programación orientada a objetos en C, es recomendable poner en práctica la programación orientada micro-controlador de objeto usando C? ¿Cuáles son los pros y los contras?

¿Fue útil?

Solución

Mientras que no es necesario polimorfismo que está bien para pasar alrededor de estructuras. Pero tan pronto como se utiliza polimorfismo / función virtual y las funciones de poner dentro de estas estructuras podría llegar a ser muy críptica.

También depende de lo que tiene que hacer. Para los conductores que no es necesario OO, tal vez para su aplicación. Tenga en cuenta que microcontroladores son bajos whit RAM, cualquiera que se necesitan para mantener baja la huella de memoria RAM todo el tiempo en cualquier caso.

Si no va a escribir más de 40k líneas de llanura aplicación C es lo suficientemente bueno y sin trucos de fantasía OO.

Otros consejos

Mi respuesta corta es no. Los microcontroladores son muy restringidas cuando se trata de la memoria del programa de código, la velocidad de ejecución, y la memoria RAM. Mantener las cosas lo más simple posible con C es aconsejable. C no está destinado a ser un lenguaje orientado a objeto. Lo más que se debe considerar hacer uso de punteros y estructuras, pero no intenta simular el polimorfismo o cualquier cosa de lujo así.

Sí, es no sólo posible sino en mi opinión, a veces aconsejable.

En un pequeño sistema, tiene que ser muy consciente de los costos de la forma que elija para hacer las cosas. Al mismo tiempo, puede haber algunas ventajas reales de la orientación a objetos "ligera" para organizar el código, sobre todo si usted necesita para hacer un conjunto de herramientas flexibles para implementar rápidamente las personalizaciones, o incluso a tiempo de ejecución permiso de conexión en caliente. Un do-it-yourself aplicación objeto ligero (hecho por ejemplo con estructuras y punteros de función) en C puede ser un buen compromiso.

Tal vez el mejor ejemplo conocido de esto es el núcleo de Linux.

Sí, pero si su cadena herramienta es compatible con C ++, sería mejor usar eso. Si el microcontrolador particular es un recurso limitado, o la aplicación tiene requisitos de tiempo real, tendrá que ser bastante conservadora en el uso de C ++, en particular, la biblioteca estándar, sino que se debe utilizar, sin embargo, más de C si el diseño e implementación son OO.

Es cierto, puede utilizar programación orientada a objetos con C. También se puede utilizar # define a las palabras clave de cambio a parecerse más a Python. Sin embargo, yo no recomendaría hacerlo bien.

Cuando he visto a alguien tratar de hacer más compleja programación orientada a objetos con C, siempre termina en el código ilegible. Cuando veo el código C, espero que se vea como C, no la idea de alguien de la forma en programación orientada a objetos en C debería funcionar.

Si desea programación orientada a objetos en un micro, el uso de C ++. Muchos / la mayoría de los nuevos micros apoyan. No haga caso de los que dicen que los micros no tienen suficiente memoria o la velocidad porque no tienen ni idea de la rapidez de su micro es, la cantidad de memoria que tiene, y cuáles son sus limitaciones de rendimiento son. Bien escrito en C ++ C batirá mal escrito en el tamaño y la velocidad en cualquier momento.

Para mi proyecto incrustado siguiente, me volveré a usar partes de C ++ y construir una aplicación basada en la interfaz / clase / objeto estático limpia con typedefs, define y todos los demás c desagradable dejado fuera. Las cosas que planeo utilizar son:

  • clases . Esto me permite código encapsular y prueba de la unidad con objetos de código auxiliar por medio de la configuración.
  • Interfaces . Me da el poder de un contrato claro en cada clase en comparación con c archivos de cabecera, que la gente tiende a utilizar como cubos de basura para todo tipo de typedefs, define y esas cosas. Además, las interfaces me da la separación de la definición e implementación y permite la unidad de pruebas con objetos de código auxiliar.
  • objetos estáticos . Preveo ninguna memoria dinámica, por lo que todos los objetos serán estáticas. Probablemente una clase de aplicación definirá y initialize todo y por lo tanto sea la configuración de la aplicación.

Con todo, se compilará en algo que es tan eficiente como C, pero con una visión mucho mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top