Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Embarqué

Mémoire partitionnée dans Nucleus SE : Configuration, APIs et bonnes pratiques

Mémoire partitionnée dans Nucleus SE : Configuration, APIs et bonnes pratiquesVoir la série RTOS Revealed

Les partitions mémoire ont été introduites dans notre article précédent, où nous les comparions à la fonction C conventionnelle malloc(). Une partition est un bloc mémoire de taille fixe provenant d'un pool de partitions, offrant une allocation et désallocation déterministes sur lesquelles les tâches peuvent compter.

Utilisation des partitions

Dans Nucleus SE, les pools de partitions sont définis à la compilation. Jusqu'à 16 pools peuvent être configurés par application. Si aucun pool n'est défini, toutes les structures de données et le code API associés sont omis du build, gardant l'empreinte minimale.

Un pool est simplement une zone mémoire contiguë divisée en un nombre défini de partitions identiques. L'application contrôle la taille et le nombre de chaque pool. Les tâches demandent une partition et reçoivent un pointeur vers le bloc. Il est de la responsabilité de l'appelant de rester dans les limites allouées. Une partition peut être retournée au pool par n'importe quelle tâche via l'API de désallocation. Si le pool est épuisé, l'appel peut retourner une erreur ou suspendre la tâche, selon les paramètres de l'API et les options de build.

Configuration des partitions mémoire

Nombre de pools de partitions

Les pools de partitions sont activés par des instructions #define dans nuse_config.h. Le symbole clé est NUSE_PARTITION_POOL_NUMBER, qui définit le nombre de pools. La valeur par défaut est 0, signifiant aucun pool actif. Les valeurs valides vont de 1 à 16 ; une valeur invalide déclenche une erreur #error à la compilation générée par nuse_config_check.h.

Définir une valeur non-nulle active les structures de données nécessaires et les initialise en ROM. Cela débloque aussi les symboles d'activation d'API décrits ci-dessous.

Activations des API

Chaque appel de service a une macro d'activation dans nuse_config.h. Pour les partitions, les symboles suivants existent :

Par défaut, toutes sont définies sur FALSE, retirant l'implémentation du build. Pour utiliser une fonctionnalité, définissez la macro correspondante sur TRUE. Activer une API sans pools définis (sauf NUSE_Partition_Pool_Count()) résulte en une erreur à la compilation. Utiliser une API non activée cause une erreur à l'édition de liens.

Mémoire partitionnée dans Nucleus SE : Configuration, APIs et bonnes pratiques

Appels de service des pools de partitions

Nucleus RTOS offre sept appels de service pour les pools de partitions. Dans Nucleus SE, seulement les APIs d'allocation et désallocation de base sont implémentées. Le tableau ci-dessous liste chaque appel, son statut d'implémentation, et une brève description :

APIImplémentationDescription
NU_Allocate_Partition()ImplémentéAllouer une partition.
NU_Deallocate_Partition()ImplémentéLibérer une partition.
NU_Partition_Pool_Information()ImplémentéRécupérer métadonnées du pool.
NU_Established_Partition_Pools()ImplémentéCompter pools actifs.
NU_Create_Partition_Pool()Non implémentéCréation dynamique de pool.
NU_Delete_Partition_Pool()Non implémentéSuppression dynamique de pool.
NU_Partition_Pool_Pointers()Non implémentéRetourner pointeurs de pools.

Notez que ni Nucleus RTOS ni SE ne fournissent de routine de réinitialisation pour les pools de partitions. Ce choix de conception reflète les cas d'usage typiques où une tâche alloue une partition et passe son pointeur à une autre tâche qui la désallouera éventuellement. Réinitialiser un pool marquerait silencieusement toutes les partitions comme libres, brisant le contrat au niveau tâche.

Services d'allocation et désallocation

Les opérations de base sont :

API Nucleus RTOS Allocation

Prototype :

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

Valeurs de retour incluent NU_SUCCESS, NU_NO_PARTITION, NU_INVALID_POOL, NU_INVALID_POINTER, NU_INVALID_SUSPEND, NU_TIMEOUT, et NU_POOL_DELETED.

API Nucleus SE Allocation

Prototype :

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

Paramètres :

Les codes de retour mirent ceux du RTOS mais sont préfixés avec NUSE_. Les demandes de suspension invalides depuis des threads non-tâche ou quand les APIs de blocage sont désactivées produisent NUSE_INVALID_SUSPEND.

Pour une présentation complète de l'implémentation, voir les articles suivants de la série RTOS Revealed.

Embarqué

  1. Acier inoxydable expliqué : composition, production et impact mondial
  2. Fondamentaux de la mémoire numérique : adressage, accès et volatilité
  3. Fondamentaux C# : Entrées et sorties essentielles
  4. Maîtriser la gestion de mémoire en C++ : Utilisation experte de new et delete
  5. Boîtes aux lettres dans Nucleus SE : Guide pratique de configuration et d'utilisation
  6. Sémaphores dans Nucleus RTOS : Services utilitaires et structures de données
  7. Sémaphores dans Nucleus SE : Vue d'ensemble, configuration et API essentielles
  8. Files d'attente dans Nucleus SE : Introduction et appels de service de base
  9. Rutronik devient distributeur exclusif européen de la RAM IoT d'AP Memory sous accord global