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

Memoria de partición en Nucleus SE: Configuración, APIs y mejores prácticas

Memoria de partición en Nucleus SE: Configuración, APIs y mejores prácticasVer la serie RTOS Revealed

Las particiones de memoria se introdujeron en nuestro artículo anterior, donde las comparamos con la función C convencional malloc(). Una partición es un bloque de memoria de tamaño fijo que proviene de un pool de particiones, ofreciendo asignación y desasignación deterministas en las que las tareas pueden confiar.

Uso de Particiones

En Nucleus SE, los pools de particiones se definen en tiempo de compilación. Hasta 16 pools pueden configurarse por aplicación. Si no se definen pools, todas las estructuras de datos y código API relacionados se omiten de la compilación, manteniendo la huella mínima.

Un pool es simplemente un área de memoria contigua dividida en un número determinado de particiones idénticas. La aplicación controla el tamaño y conteo de cada pool. Las tareas solicitan una partición y reciben un puntero al bloque. Es responsabilidad del llamador permanecer dentro de los límites asignados. Una partición puede devolverse al pool por cualquier tarea vía la API de desasignación. Si el pool se agota, la llamada puede devolver un error o suspender la tarea, dependiendo de los parámetros de la API y opciones de compilación.

Configuración de Particiones de Memoria

Número de Pools de Particiones

Los pools de particiones se habilitan mediante sentencias #define en nuse_config.h. El símbolo clave es NUSE_PARTITION_POOL_NUMBER, que establece el conteo de pools. El valor por defecto es 0, significando que no hay pools activos. Los valores válidos van de 1 a 16; un valor inválido dispara un error #error en tiempo de compilación generado por nuse_config_check.h.

Establecer un valor no cero activa las estructuras de datos necesarias e inicializarlas en ROM. También desbloquea los símbolos de habilitación de API descritos a continuación.

Habilitación de API

Cada llamada de servicio tiene una macro de habilitación en nuse_config.h. Para particiones existen los siguientes símbolos:

Por defecto todas están en FALSE, eliminando la implementación de la compilación. Para usar una característica, establezca la macro correspondiente en TRUE. Habilitar una API sin pools definidos (excepto NUSE_Partition_Pool_Count()) resulta en error en tiempo de compilación. Usar una API no habilitada causa error en tiempo de enlace.

Memoria de partición en Nucleus SE: Configuración, APIs y mejores prácticas

Llamadas de Servicio de Pool de Particiones

Nucleus RTOS ofrece siete llamadas de servicio para pools de particiones. En Nucleus SE, solo las APIs centrales de asignación y desasignación están implementadas. La tabla a continuación lista cada llamada, su estado de implementación y una breve descripción:

APIImplementaciónDescripción
NU_Allocate_Partition()ImplementadoAsignar una partición.
NU_Deallocate_Partition()ImplementadoLiberar una partición.
NU_Partition_Pool_Information()ImplementadoRecuperar metadatos del pool.
NU_Established_Partition_Pools()ImplementadoContar pools activos.
NU_Create_Partition_Pool()No implementadoCreación dinámica de pool.
NU_Delete_Partition_Pool()No implementadoBorrado dinámico de pool.
NU_Partition_Pool_Pointers()No implementadoRetornar punteros de pool.

Tenga en cuenta que ni Nucleus RTOS ni SE proporcionan una rutina de reset para pools de particiones. Esta elección de diseño refleja casos de uso típicos donde una tarea asigna una partición y pasa su puntero a otra tarea que eventualmente la desasignará. Resetear un pool marcaría silenciosamente todas las particiones como libres, rompiendo el contrato a nivel de tarea.

Servicios de Asignación y Desasignación

Las operaciones centrales son:

API de Asignación de Nucleus RTOS

Prototipo:

STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, VOID **return_pointer, UNSIGNED suspend); 

Valores de retorno incluyen NU_SUCCESS, NU_NO_PARTITION, NU_INVALID_POOL, NU_INVALID_POINTER, NU_INVALID_SUSPEND, NU_TIMEOUT y NU_POOL_DELETED.

API de Asignación de Nucleus SE

Prototipo:

STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL pool, ADDR *return_pointer, U8 suspend); 

Parámetros:

Los códigos de retorno reflejan los de RTOS pero con prefijo NUSE_. Solicitudes de suspensión inválidas desde hilos no-tarea o cuando APIs de bloqueo están deshabilitadas producen NUSE_INVALID_SUSPEND.

Para un recorrido completo de la implementación, vea los artículos subsiguientes en la serie RTOS Revealed.

Incrustado

  1. Servicios de Rectificado de Superficies de Precisión: Proceso Experto y Calidad
  2. Fundamentos de Memoria Digital: Direccionamiento, Acceso y Volatilidad
  3. Acero inoxidable explicado: composición, producción e impacto global
  4. Buzones en Nucleus SE: Guía práctica de configuración y uso
  5. Semaforos en Nucleus RTOS: Servicios de utilidad y estructuras de datos
  6. Semaforos en Nucleus SE: Visión general, configuración y API esenciales
  7. Grupos de banderas de evento en Nucleus SE: Guía introductoria de configuración y uso de API
  8. Colas en Nucleus SE: Introducción y llamadas de servicio principales
  9. Rutronik se convierte en distribuidor exclusivo europeo de IoT RAM de AP Memory bajo acuerdo global
  10. Fundamentos de C#: Entrada y salida esenciales
  11. Dominando la gestión de memoria en C++: uso experto de new y delete