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

Señales

En este RTOS Revealed, voy a ver las señales, que son el método más simple de comunicación entre tareas compatible con Nucleus SE. Proporcionan un medio de muy bajo costo para pasar mensajes simples entre tareas.

Uso de señales

Las señales son diferentes de todos los otros tipos de objetos del núcleo en que no son autónomas:las señales están asociadas con tareas y no tienen existencia independiente. Si las señales están configuradas para una aplicación, cada tarea tiene un conjunto de ocho banderas de señales.

Cualquier tarea puede establecer las señales de otra tarea. Solo la tarea del propietario puede leer las señales. La lectura es destructiva, es decir, las señales se borran mediante el proceso de lectura. Ninguna otra tarea puede leer o borrar las señales de una tarea.

Hay una función en Nucleus RTOS que permite que una tarea designe una función que se ejecuta cuando otra tarea establece uno o más de sus indicadores de señal. Esto es algo análogo a una rutina de servicio de interrupción. Esta capacidad no es compatible con Nucleus SE; las tareas necesitan interrogar sus banderas de señal explícitamente.

Configuración de señales

Como ocurre con la mayoría de los aspectos de Nucleus SE, la configuración de las señales se controla principalmente mediante #define declaraciones en nuse_config.h . La configuración clave es NUSE_SIGNAL_SUPPORT , que habilita la instalación (para todas las tareas de la aplicación). No es cuestión de especificar el número de señales, simplemente hay un conjunto de ocho banderas para cada tarea en la aplicación.

La configuración de este parámetro de habilitación es la "habilitación maestra" para las señales. Esto hace que una estructura de datos se defina y se dimensione en consecuencia, de lo cual hablaremos más adelante en este artículo. También activa la configuración de habilitación de API.

API habilitadas

Cada función de API (llamada de servicio) en Nucleus SE tiene un #define habilitante símbolo en nuse_config.h . Para las señales, estos son:

  NUSE_SIGNALS_SENDNUSE_SIGNALS_RECEIVE  

De forma predeterminada, ambos están configurados como FALSO . , deshabilitando así cada llamada de servicio e inhibiendo la inclusión de cualquier código de implementación. Para configurar señales para una aplicación, debe seleccionar las llamadas a la API que desea utilizar y establecer sus símbolos de habilitación en TRUE .

A continuación, se muestra un extracto del nuse_config.h predeterminado. archivo:

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

Se producirá un error de tiempo de compilación si una función de API de señales está habilitada y la función de señales no se ha habilitado. Si su código utiliza una llamada a la API, que no se ha habilitado, se producirá un error de tiempo de enlace, ya que no se habrá incluido ningún código de implementación en la aplicación. Por supuesto, la habilitación de las dos funciones de API es algo redundante, ya que no tendría sentido habilitar el soporte de señales y no tener estas API disponibles. Las habilitaciones se incluyen para compatibilidad con otras funciones de Nucleus SE.

Llamadas de servicio de señales

Nucleus RTOS admite cuatro llamadas de servicio que pertenecen a señales, que brindan la siguiente funcionalidad:

La implementación de cada una de estas llamadas de servicio se examina en detalle.

Servicios de envío y recepción de señales

Las operaciones fundamentales, que se pueden realizar en el conjunto de señales de una tarea, son enviarle datos (que puede ser realizado por cualquier tarea) y leer datos de él (y así borrar los datos, que solo puede hacer el propietario) . Nucleus RTOS y Nucleus SE proporcionan dos llamadas API básicas para estas operaciones, que se analizarán aquí.

Dado que los indicadores de señales son bits, es mejor visualizarlos como números binarios. Como el estándar C no admite históricamente una representación de constantes binarias (solo octal y hexadecimal), la distribución de Nucleus SE incluye un archivo de encabezado útil: nuse_binary.h - que contiene #define símbolos de la forma b01010101 para los 256 valores de 8 bits. Aquí hay un extracto de nuse_binary.h archivo:

 #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 enviar señales a cualquier otra tarea de la aplicación. El envío de señales implica el establecimiento de una o más banderas de señales. Esta es una operación OR que no tiene ningún efecto sobre los indicadores establecidos previamente.

Llamada a la API Nucleus RTOS para enviar señales

Prototipo de llamada de servicio:

STATUS NU_Send_Signals (tarea NU_TASK *, señales SIN FIRMAR);

Parámetros:

tarea - puntero al bloque de control de la tarea que posee las banderas de señales que se van a configurar

señales - el valor de las banderas de señales que se establecerán

Devoluciones:

NU_SUCCESS - la llamada se completó con éxito

NU_INVALID_TASK - el puntero de la tarea no es válido

Llamada a la API de Nucleus SE para enviar señales

Esta llamada a la API admite la funcionalidad clave de la API Nucleus RTOS.

Prototipo de llamada de servicio:

STATUS NUSE_Signals_Send (tarea NUSE_TASK, señales U8);

Parámetros:

tarea - el índice (ID) de la tarea que posee las banderas de señales que se van a configurar

señales - el valor de las banderas de señales que se establecerán

Devoluciones:

NUSE_SUCCESS - la llamada se completó con éxito

NUSE_INVALID_TASK - el índice de la tarea no es válido

Implementación de señales de envío de Nucleus SE

Aquí está el código completo para NUSE_Signals_Send () función:

  STATUS NUSE_Signals_Send (tarea NUSE_TASK, señales U8) {#if NUSE_API_PARAMETER_CHECKING if (tarea> =NUSE_TASK_NUMBER) {return NUSE_INVALID_TASK; } #endif NUSE_CS_Enter (); NUSE_Task_Signal_Flags [tarea] | =señales; NUSE_CS_Salir (); return NUSE_SUCCESS;}  

El código es muy simple. Después de cualquier verificación de parámetros, los valores de la señal se colocan en OR en los indicadores de señal de la tarea especificada. El bloqueo de tareas no es relevante para las señales.

Recepción de señales

Una tarea solo puede leer su propio conjunto de banderas de señales. El proceso de leerlos es destructivo; es decir, también da como resultado que las banderas se borren.

Llamada a la API Nucleus RTOS para recibir señales

Prototipo de llamada de servicio:

UNSIGNED NU_Receive_Signals (VOID);

Parámetros:ninguno

Devuelve:el valor de las banderas de señales

Llamada a la API de Nucleus SE para recibir señales

Esta llamada a la API admite la funcionalidad clave de la API Nucleus RTOS.

Prototipo de llamada de servicio:

U8 NUSE_Signals_Receive (void);

Parámetros:ninguno

Devuelve:el valor de las banderas de señal

Implementación de señales receptoras de Nucleus SE

Aquí está el código completo para NUSE_Signals_Receive () función:

  U8 NUSE_Signals_Receive (void) {señales U8; NUSE_CS_Enter (); señales =NUSE_Task_Signal_Flags [NUSE_Task_Active]; NUSE_Task_Signal_Flags [NUSE_Task_Active] =0; NUSE_CS_Salir (); señales de retorno;}  

El código es muy simple. Se copia el valor de las banderas, se borra el valor original y la función API devuelve la copia. El bloqueo de tareas no es relevante para las señales.


Incrustado

  1. Señales
  2. Rutronik:MCU inalámbricos de consumo ultrabajo de Redpine Signals
  3. Rutronik:módulos y SoC inalámbricos multiprotocolo de Redpine Signals
  4. Detección del magnetismo del núcleo de un solo átomo
  5. La red neuronal artificial puede mejorar la comunicación inalámbrica
  6. Nuevo dispositivo flexible puede transformar señales WiFi en electricidad
  7. El nuevo circuito detecta las señales de radio más débiles permitidas por la mecánica cuántica
  8. Los láseres ahora pueden emitir microondas y recibir señales de radiofrecuencia externas
  9. El nuevo algoritmo combina a la perfección dos señales de audio cualquiera
  10. Directrices para el diseño de RF y microondas
  11. Señales de radio Imagen de objetos ocultos y veloces