Lo que ve en una ventana de la consola es el resultado de un eco automático (que a menudo se puede activar o desactivar), donde el programa de la consola dibuja los caracteres que envía en la pantalla, o el resultado de recibir caracteres. Esto significa que hay dos formas de cambiarlo:
- Tenga un programa local, en la PC, vuelva a dibujar la pantalla.
- Haga que el dispositivo conectado vuelva a dibujar la pantalla.
Hay muchas maneras de hacer esto, pero así es como me acercaría a una implementación de pasatiempo simplista:
- Establezca un ancho de línea predeterminado, como 80, y un número de filas, como 24. Desactive el eco automático.
- Unapantallade80x24significa1920caracterespor'frame',loquesignificaque,sieldispositivoconectadoestáhaciendoeltrabajo,unatasadeactualizaciónmáximadealrededorde
1920/BAUDRATE/11
oaproximadamente5Hza115200baudios(usando1bitdeinicio,1parada,1paridad,8datos). - Asignelasteclasdeflechaa caracteres o cadenas específicos . Esto ya se puede hacer detrás de las escenas. (Para la Terminal OSX, izquierda :
3[5D
; derecha : 3[5C
; arriba & abajo indefinido por defecto.)
- Programe el dispositivo conectado para que reconozca estos caracteres y / o cadenas, y mueva la referencia del cursor en consecuencia.
- Salida a través de la línea serie no por carácter o matriz de caracteres, sino por marco. Específicamente, mantenga dos matrices de caracteres de 1921 (1920 + terminador): una para escribir mientras se transmite la otra (asumiendo el uso de hardware UART e interrupciones).
- La escritura en el buffer de cuadros se puede lograr usando una función como esta:
uint8_t framewrite(const char *s, uint8_t row, uint8_t col)
... Donde *s
es su matriz de caracteres [terminada], y row
y col
es donde desea que aparezca el primer carácter. (La devolución uint8_t
es para la captura de errores).
- Probablemente querrá funciones como
uint8_t frame_clear(void)
, uint8_t frame_shiftrowsdown(void)
, etc.
- Para indicar la posición del cursor, puede alternar el carácter actual y un cuadro negro o el carácter que elija (
pblinkchar
), usando framewrite(pblinkchar,cursor_row,cursor_col)
.
- Se puede usar el mismo método para devolver los caracteres a la posición del cursor.
Estoy seguro de que hay formas mucho más simples (creo que los de software lo llaman "elegante") de hacer esto mediante la programación de una ventana de PC, y probablemente puedas descubrir cómo cavando a través de thou tutorial , pero lo anterior es similar a lo que he hecho en el pasado y funciona para interfaces de usuario simples con micros con mucha memoria de repuesto.