¿Qué sucede con las declaraciones printf en un compilador cruzado para dispositivos integrados?

2

¿Qué sucede con las declaraciones de impresión en una cadena de herramientas incrustadas donde el microcontrolador no tiene una pantalla adjunta? ¿Se bloquea el programa? ¿Qué sucede con todas las otras varias dependencias de c cuando usamos los archivos de encabezado estándar en un microcontrolador con características que una computadora moderna no tiene?

    

4 respuestas

4

Depende completamente de cómo se configuran las bibliotecas. Pueden emitirse a través de SCI, pueden ser tragados en silencio, incluso pueden causar un error de referencia indefinido en el enlace.

    
respondido por el Ignacio Vazquez-Abrams
3

Para usar funciones como printf , tienes que attach STDIO (entrada / salida estándar) a una corriente primero . Me vinculé a la biblioteca de stdio para AVR 's.

En mi opinión, es principalmente una cuestión de compatibilidad del mundo de la PC (o para programadores perezosos) y para la mayoría de los microcontroladores (considerando el tamaño de RAM / ROM) estás usando una herramienta muy pesada con gran espacio de memoria para realizar una tarea relativamente simple . La mayoría de las veces estará mejor escribiendo su propia rutina para hacer exactamente lo que necesita. Recuerde que printf(); es un comando extremadamente poderoso y vincularlo a su código enlaza todas sus funciones, no solo las (pocas) cosas que realmente necesita.

Creo que en AVR, solo incluir un printf te hace retroceder aproximadamente 1 o 2kB de flash, que es mucho en un dispositivo de 2 o 4 kB y las bibliotecas AVR están bastante bien optimizadas.

Observe que no todas las bibliotecas estándar ... son 'inútiles', algunas de las funciones en stdlib.h sigue siendo muy útil, como por ejemplo. el ultoa(); que compila bastante bonito y pequeño código.

    
respondido por el jippie
1

Depende de las bibliotecas que estés usando. P.ej. Si está desarrollando el MSP430 con CCS, puede imprimirf () sobre JTAG (que es mejor) que nada si no tienes otra interfaz de depuración).

Con mspgcc le dará una referencia indefinida (y luego podría implementar su propio printf () sobre UART, por ejemplo).

    
respondido por el Renan
0

Si sus declaraciones de printf envían texto a un puerto serie, el programa no sabrá ni le importará si hay un terminal conectado al puerto serie.

    
respondido por el Peter Bennett

Lea otras preguntas en las etiquetas