Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

Comunicación eficiente entre tareas con señales Nucleus SE

En esta serie RTOS Revealed, exploramos las señales – el método más simple y de bajo coste para comunicación entre tareas en Nucleus SE. Las señales permiten paso de mensajes ligero y fiable entre tareas.

Uso de Señales

A diferencia de otros objetos del kernel, las señales no son autónomas; están intrínsecamente ligadas a una tarea y existen solo dentro del contexto de esa tarea. Cuando las señales están habilitadas en una aplicación, cada tarea recibe automáticamente un conjunto de ocho banderas de señal binarias.

Cualquier tarea puede establecer las banderas de señal de otra tarea. Sin embargo, solo la tarea propietaria puede leer y limpiar esas banderas –y la lectura es destructiva, lo que significa que las banderas se reinician durante la operación de lectura. Ninguna otra tarea puede inspeccionar o modificar el estado de señal de una tarea.

Nucleus RTOS ofrece una facilidad que permite a una tarea nominar un callback para ejecutarse cuando otra tarea establece una de sus banderas de señal. Esto es análogo a una rutina de servicio de interrupción. Desafortunadamente, esta característica no está disponible en Nucleus SE; las tareas deben sondear explícitamente sus banderas de señal.

Configuración de Señales

Las señales se configuran principalmente a través de directivas #define en nuse_config.h. La macro clave es NUSE_SIGNAL_SUPPORT, que, cuando se establece en TRUE, activa el soporte de señales en toda la aplicación. El número de señales por tarea es fijo en ocho; no se requiere configuración adicional.

Habilitar señales crea las estructuras de datos necesarias y activa las llamadas API relevantes. Cada función API en Nucleus SE tiene su propia macro de habilitación. Para señales, los siguientes habilitadores están definidos:

NUSE_SIGNALS_SEND NUSE_SIGNALS_RECEIVE

Por defecto, ambas están en FALSE, deshabilitando las llamadas de servicio correspondientes y omitiendo cualquier código de implementación. Para usar señales, establezca los habilitadores deseados en TRUE. No habilitar la API mientras se usa una llamada resultará en error en tiempo de compilación; usar una API no implementada causará error en tiempo de enlace.

Extracto de muestra de nuse_config.h:

#define NUSE_SIGNAL_SUPPORT FALSE /* Habilita soporte para señales */ #define NUSE_SIGNALS_SEND FALSE /* Habilitador de llamada de servicio */ #define NUSE_SIGNALS_RECEIVE FALSE /* Habilitador de llamada de servicio */

Llamadas de Servicio de Señales

Nucleus SE proporciona cuatro llamadas de servicio principales relacionadas con señales. Solo dos están implementadas en SE; las otras están reservadas para RTOS pero no para SE.

Operaciones Enviar y Recibir

Las banderas de señal son bits, mejor visualizadas como números binarios. Como C estándar carece de literales binarios, Nucleus SE incluye nuse_binary.h, que define macros como b01010101 para todos los 256 valores de 8 bits.

#define b00000000 ((U8)0x00) #define b00000001 ((U8)0x01) #define b00000010 ((U8)0x02) #define b00000011 ((U8)0x03) #define b00000100 ((U8)0x04) #define b00000101 ((U8)0x05)

Envío de Señales

Cualquier tarea puede establecer una o más banderas de señal en otra tarea vía operación OR –banderas establecidas previamente permanecen inalteradas.

Llamada API de Nucleus RTOS

STATUS NU_Send_Signals(NU_TASK *task, UNSIGNED signals);

Parámetros:

Retorna:

Llamada API de Nucleus SE

STATUS NUSE_Signals_Send(NUSE_TASK task, U8 signals);

Parámetros:

Retorna:

Implementación de NUSE_Signals_Send()

STATUS NUSE_Signals_Send(NUSE_TASK task, U8 signals){ #if NUSE_API_PARAMETER_CHECKING if (task >= NUSE_TASK_NUMBER){ return NUSE_INVALID_TASK; } #endif NUSE_CS_Enter(); NUSE_Task_Signal_Flags[task] |= signals; NUSE_CS_Exit(); return NUSE_SUCCESS; }

Recepción de Señales

Una tarea solo puede leer sus propias banderas de señal, y la operación es destructiva –las banderas se limpian al leer.

Llamada API de Nucleus RTOS

UNSIGNED NU_Receive_Signals(VOID);

Retorna el valor actual de banderas de señal.

Llamada API de Nucleus SE

U8 NUSE_Signals_Receive(void);

Retorna el valor actual de banderas de señal.

Implementación de NUSE_Signals_Receive()

U8 NUSE_Signals_Receive(void){ U8 signals; NUSE_CS_Enter(); signals = NUSE_Task_Signal_Flags[NUSE_Task_Active]; NUSE_Task_Signal_Flags[NUSE_Task_Active] = 0; NUSE_CS_Exit(); return signals; }

Estas funciones directas ilustran cómo Nucleus SE gestiona señales eficientemente sin afectar el bloqueo o planificación de tareas.

Incrustado

  1. Redes neuronales artificiales impulsan el rendimiento de comunicaciones inalámbricas
  2. Rectena flexible convierte señales WiFi en electricidad para dispositivos diminutos
  3. Circuito cuántico rompe barreras: detecta las señales de radio más débiles posibles
  4. Láseres semiconductores ahora emiten microondas y capturan señales de radio, allanando camino para Wi-Fi ultra-rápido
  5. Algoritmo de portamento en tiempo real une dos señales de audio sin fisuras
  6. Principios Esenciales de Diseño RF y Microondas para Rendimiento Confiable en PCB
  7. Comunicación eficiente entre tareas con señales Nucleus SE
  8. Rutronik distribuye RS14100 de Redpine Signals: MCUs wireless multi‑protocolo seguros y ultra‑bajo consumo
  9. Rutronik ofrece SoCs multi‑protocolo ultra‑bajo consumo de Redpine Signals
  10. Imagen por radio en tiempo real: Detección de objetos ocultos y de alta velocidad a distancia
  11. Medición de la firma magnética del núcleo de un solo átomo