Usando diferentes funciones putch () en una biblioteca

2

Estoy escribiendo una biblioteca de C para microcontroladores PIC18 que se comunicarán con el chip ESP8266 sobre el bus UART. Me gustaría usar la función printf() para enviar cadenas formateadas al chip.

En XC8, printf() usa la función putch() que el usuario debe definir como salida. De esta manera, el usuario puede decidir si usar UART, LCD, ... para la salida estándar.

Esto me da un problema. En la biblioteca, quiero usar printf() que se basa en putch() , pero no puedo (no debería) declarar putch() en la biblioteca porque eso daría un conflicto cuando un usuario quiera usar el ESP8266 en combinación con un LCD para el que ya definió putch() . ¿Cómo puedo resolver este problema?

Podría usar sprintf() para almacenar temporalmente la cadena en la memoria y luego escribir mi propio código para escribir este byte a byte en el ESP, pero prefiero no hacerlo debido a la ineficiencia de la memoria y el tiempo.

También podría rodar mi propio esp8266_printf() con una funcionalidad limitada y usarlo en su lugar, pero eso tampoco se siente bien.

¿Hay una solución limpia (er) para esto?

    
pregunta Keelan

1 respuesta

2

Podría crear un PUTCH personalizado que decida en el tiempo de ejecución qué hacer con el byte. Esto se basaría en una configuración global que usted mantenga. Cambiaría la configuración global para enrutar los caracteres a donde quiera que vayan en ese momento. Uno de ellos puede ser la rutina de un cliente, aunque tendría que llamarse otra cosa que no sea PUTCH.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas