Programando un Atxmega para usar UART

0

Comencé a escribir un programa para un ATXMega. Este programa debe leer un comando a través de USART y luego ejecutarlo (es decir, enviar datos a través de SPI o enviar datos a través de USART). Pero el µC debe ejecutar un comando tras otro, es decir, si hay un comando actual en ejecución (por ejemplo, el envío de bits a través de SPI), el comando recibido se debe volver a colocar en un bucle de espera hasta que el µC haya terminado de realizar esta tarea. Ahora me preguntaba cómo debería diseñar este bucle de espera. Al escribir un programa para la misma tarea en mi PC, simplemente creé dos subprocesos, y un subproceso llenó un búfer, y el segundo lo vació y ejecutó el comando. Pero por lo que sé, el multihilo no es posible en un µC.
¿Cuál es la mejor manera de abordar el comportamiento descrito sin subprocesos múltiples en un µC? ¿Mi enfoque actual (usar un búfer con longitud fija, llenarlo a través de interrupciones y dejar que el µC verifique el búfer cada 100 ms en busca de nuevas cosas) es la mejor manera de hacerlo? ¿O hay una mejor manera?

    
pregunta arc_lupus

1 respuesta

1

Sí, esa es una forma válida de hacerlo (también es mi forma preferida). Almacene los caracteres en su interrupción, úselos cuando tenga tiempo (generalmente en su bucle infinito normal). Lo que usualmente usará es un búfer de anillo con punteros de lectura / escritura para no perder o sobrescribir ningún carácter.

El multiproceso es realmente posible, pero tendrá que implementarlo usted mismo (o usar algún sistema operativo para su µC), además, no es realmente diferente de lo que hace en su bucle infinito. Es posible que desee ver FreeRTOS o Micrium como ejemplos.

    
respondido por el Tom L.

Lea otras preguntas en las etiquetas