Interfaz de usuario integrada de 16x2 lcd del sistema

1

Estoy desarrollando una interfaz de usuario para la aplicación de sistema embebido. Tengo que manejar pocas tareas críticas que siempre se llaman en el ciclo infinito main while ().

El flujo del programa ingresa al submenú si se presiona la tecla. Como el submenú tiene su propio bucle infinite while (), por lo tanto, el control no puede volver al bucle principal por sí solo. Hace que el acceso a tareas críticas sea imposible mientras el submenú esté activo.

  • ¿Hay alguna forma de servir las tareas en el bucle secundario que se llaman en el ciclo principal solamente?
  • Una forma de acceso es llamarlos también en el sub-bucle. Pero no creo que sea un enfoque correcto ya que la interfaz de usuario tiene más de 50 submenús y también realiza sub-bucles.
pregunta M_Singh

2 respuestas

3

No ha mencionado qué MCU está utilizando pero mirando la etiqueta Supongo que está utilizando PIC MCU. La mejor solución para su problema es utilizar FreeRTOS . FreeRTOS está disponible para PIC18 PIC24 PIC32 . Puede crear fácilmente tantas tareas como desee y también puede incluir while(1) dentro de ellas.

xTaskCreate( vTask1, "Task 1", 240, NULL, 1, NULL );
xTaskCreate( vTask2, "Task 2", 240, NULL, 1, NULL );
xTaskCreate( vTask3, "Task 3", 240, NULL, 1, NULL );

void vTask1()
{
 for(;;)
 {
    PORTDbits.RD0 = 1;
    vTaskDelay( 1000 / portTICK_RATE_MS );
    PORTDbits.RD0 = 0;
    vTaskDelay( 1000 / portTICK_RATE_MS );

 }
}

lo mismo que puedes hacer para otra tarea. Ahora todo lo que necesita hacer es ejecutar el planificador

vTaskStartScheduler();
    
respondido por el Aircraft
1

Hay muchas maneras de hacer esto. El que usaría es crear un temporizador con una interrupción periódica, luego llamar a las tareas críticas desde el controlador de interrupción del temporizador. La función de interrupción se ejecutará todo el tiempo, sin importar qué otro código se esté ejecutando en los bucles principales o del submenú.

Otro método que he usado es poner la llamada a las tareas críticas en la función de prensa 'esperar a la tecla' - mientras espera la tecla, hacer tomas críticas . Esto tiene la ventaja de ser de un solo hilo y no tener problemas de acceso a datos concurrentes, pero significa que no sabe exactamente con qué frecuencia se ejecutarán las tareas críticas; depende de lo que tenga que hacer la función del submenú para procesar la presión de las teclas. , que probablemente variará en diferentes menús / submenús.

    
respondido por el Icy

Lea otras preguntas en las etiquetas