Concepto básico de RTOS. Comunicación de tareas

2

Estoy aprendiendo a usar un RTOS, CMSIS RTOS en este caso, por lo que mi pregunta es básica. Quiero saber cuál es la mejor manera de compartir información entre dos tareas.

Lo que estoy tratando de hacer es básicamente un controlador con alguna comunicación externa. Este sistema tiene dos tareas.

Tarea 1. Tarea del controlador:

  • Se ejecuta a intervalos fijos, cada X ms, lo más rápido posible
  • Tiene un punto de ajuste
  • Lee varios sensores
  • Calcula y establece varias salidas

Tarea 2. Tarea de comunicación:

  • Es un esclavo en una comunicación maestro / esclavo (Modbus). Por lo tanto, solo se comunica cuando recibe una solicitud del maestro
  • Debe poder establecer el punto de ajuste
  • Debe poder leer el valor / estado de los sensores y las salidas

¿Cómo deben comunicarse estas dos tareas? Si no estaba usando un RTOS, usaré variables globales privadas, envueltas con algunas funciones públicas de obtener / establecer. Pero hasta donde entiendo, esa no es la manera de hacerlo en un RTOS.

¿Debo usar una cola donde la tarea de comunicación escribe un mensaje de solicitud, que la tarea del controlador verificará cada iteración? El problema que veo con esta solución es que la tarea del controlador debe ejecutarse lo más rápido posible, por lo que la tarea del controlador solo responde a una solicitud en cada iteración que hace que la tarea de comunicación sea menos receptiva o responde a todas las solicitudes que hacen que su tiempo de ejecución sea mayor .

    
pregunta JHG

1 respuesta

1

Esta es una buena manera de pasar datos entre tareas, sí. Si es algo así como FreeRTOS, también podrá bloquear la tarea de recepción hasta que haya algo en la cola (si lo desea). O bien, puede verificar y pasar o esperar un tiempo específico antes de pasar a la siguiente instrucción de la tarea. Este bloqueo, en mi opinión, es una de las bellezas reales de ejecutar un RTOS. Poder tener una tarea a la espera de que otra tarea le pase los datos puede hacer su vida mucho más fácil y las colas lo habilitan de una manera segura.

También tiene las facilidades para verificar si una cola está llena antes de escribirle y, si está llena, la posibilidad de esperar hasta que haya espacio antes de escribirle.

Tendrás la opción, supongo, de escribir muchos tipos diferentes de datos en las colas, incluidas las estructuras. Las colas son muy útiles y una forma segura de pasar datos.

    
respondido por el DiBosco

Lea otras preguntas en las etiquetas