Mémoire partitionnée dans Nucleus RTOS/SE : Services utilitaires et structures de données
Voir la série RTOS Revealed
S'appuyant sur notre exploration précédente de la mémoire partitionnée RTOS, cet article examine les utilitaires pratiques et les structures de données sous-jacentes qui permettent une gestion mémoire efficace dans Nucleus RTOS et son édition allégée, Nucleus SE.
Services utilitaires des pools de partitions
Nucleus RTOS offre trois appels API dédiés qui fournissent des capacités d'information et de gestion essentielles pour les pools de partitions : récupérer des informations détaillées du pool, déterminer le nombre total de pools dans une application, et acquérir des pointeurs vers toutes les structures de pool. Les deux premières fonctions sont pleinement supportées dans Nucleus SE, bien qu'avec quelques différences de fonctionnalité dues à son ensemble de fonctionnalités réduit.
Obtention d'informations sur un pool de partitions
Le service NU_Partition_Pool_Information retourne un instantané complet d'un pool de partitions spécifié. Dans Nucleus SE, la fonction retourne un ensemble de données réduit, reflétant l'absence de nommage d'objets, d'ordonnancement de suspension, et de support de suspension de tâche.
Appel API Nucleus RTOS pour informations sur pool de partitions
Prototype d'appel de service :
STATUS NU_Partition_Pool_Information(NU_PARTITION_POOL *pool, CHAR *name, VOID **start_address, UNSIGNED *pool_size, UNSIGNED *partition_size, UNSIGNED *available, UNSIGNED *allocated, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task);
Paramètres :
pool — pointeur vers le pool de partitions pour lequel l'information est demandée.
name — pointeur vers un tampon de 8 caractères qui recevra le nom du pool (y compris le terminateur null).
start_address — pointeur vers une variable qui recevra l'adresse de base de la zone de données du pool.
pool_size — pointeur vers une variable qui recevra la taille totale du pool en octets.
partition_size — pointeur vers une variable qui recevra la taille de chaque partition.
available — pointeur vers une variable qui recevra le compte de partitions actuellement libres.
allocated — pointeur vers une variable qui recevra le compte de partitions en cours d'utilisation.
suspend_type — pointeur vers une variable qui recevra la politique de suspension (valeurs valides : NU_FIFO ou NU_PRIORITY).
tasks_waiting — pointeur vers une variable qui recevra le nombre de tâches suspendues sur ce pool.
first_task — pointeur vers une variable qui recevra le pointeur vers la première tâche suspendue.
Retourne :
NU_SUCCESS — opération réussie.
NU_INVALID_POOL — le pointeur de pool fourni est invalide.
Appel API Nucleus SE pour informations sur pool de partitions
Dans Nucleus SE, la même fonctionnalité est fournie via l'interface rationalisée ci-dessous. Comme SE ne supporte pas la suspension de tâche, les champs associés sont omis.
Prototype d'appel de service :
STATUS NUSE_Partition_Pool_Information(NUSE_PARTITION_POOL pool, ADDR *start_address, U32 *pool_size, U16 *partition_size, U8 *available, U8 *allocated, U8 *tasks_waiting, NUSE_TASK *first_task)
Paramètres :
pool — l'index du pool de partitions.
start_address — pointeur vers une variable qui recevra l'adresse de base de la zone de données du pool.
pool_size — pointeur vers une variable qui recevra la taille totale du pool en octets.
partition_size — pointeur vers une variable qui recevra la taille de chaque partition.
available — pointeur vers une variable qui recevra le nombre de partitions libres.
allocated — pointeur vers une variable qui recevra le nombre de partitions utilisées.
tasks_waiting — pointeur vers une variable qui recevra le nombre de tâches en attente (zéro si suspension de tâche désactivée).
first_task — pointeur vers une variable qui recevra l'index de la première tâche suspendue (zéro si suspension de tâche désactivée).
Retourne :
NUSE_SUCCESS — opération réussie.
NUSE_INVALID_POOL — l'index de pool est invalide.
NUSE_INVALID_POINTER — un ou plusieurs arguments pointeur sont nuls.
Implémentation Nucleus SE des informations sur pool de partitions
L'implémentation SE est concise : la routine remplit les champs demandés et, quand les APIs de blocage sont activées, définit le compte de tâches en attente et l'index de la première tâche (sinon ces champs sont mis à zéro).

Obtention du nombre de pools de partitions
Ce service retourne le nombre total de pools de partitions définis dans l'application. Dans Nucleus RTOS, le compte peut changer dynamiquement quand les pools sont créés ou détruits ; dans Nucleus SE, le compte est fixé à la compilation.
Appel API Nucleus RTOS pour le nombre de pools de partitions
Prototype d'appel de service :
UNSIGNED NU_Established_Partition_Pools(VOID);
Paramètres : Aucun.
Retourne : Le nombre actuel de pools de partitions actifs.
Appel API Nucleus SE pour le nombre de pools de partitions
Prototype d'appel de service :
U8 NUSE_Partition_Pool_Count(void);
Paramètres : Aucun.
Retourne : Le nombre de pools de partitions configurés à la compilation.
Implémentation
La routine SE retourne simplement la valeur de la constante de compilation NUSE_PARTITION_POOL_NUMBER.
Embarqué
- Cloud vs Serveurs internes : Choisir la bonne solution d'hébergement
- Microsoft Azure Annonce Services de Tokenisation Blockchain & Gestion de Données
- Fondamentaux de la mémoire numérique : adressage, accès et volatilité
- Structures C++ vs Classes : guide pratique pour développeurs embarqués
- Boîtes aux lettres dans Nucleus SE : Guide pratique de configuration et d'utilisation
- Sémaphores dans Nucleus RTOS : Services utilitaires et structures de données
- Sémaphores dans Nucleus SE : Vue d'ensemble, configuration et API essentielles
- Maîtriser les groupes de drapeaux d'événement : Services utilitaires et structures de données dans Nucleus RTOS/SE
- Groupes de drapeaux d'événement dans Nucleus SE : Guide d'introduction à la configuration et l'utilisation des API