当前位置:网站首页>RTOS embarqués

RTOS embarqués

2022-06-29 04:59:00 Chaussures pour enfants de la classe d'à côté

Dans le domaine des applications embarquées,À de nombreuses occasions, les exigences en temps réel du système sont strictes.,Par conséquent, le choix du système d'exploitation doit être basé sur le système en temps réel..Système d'exploitation multitâche en temps réel(Real Time Operating System,AbréviationsRTOS)Est basé sur les caractéristiques de fonctionnement du système d'exploitation,Le temps réel est le temps réel du processus physique.

1、RTOSCaractéristiques

Le système d'exploitation est le logiciel le plus important de l'ordinateur,Comme un majordome.,Assigner différentes tâches logicielles aux ressources matérielles pour l'exécution.Pour assurer la qualité du Service,Nécessité d'organiser correctement les tâches,L'accès au matériel assure également une certaine sécurité,S'assurer que les ressources matérielles ne sont pas inutilisées,Pas de conflit.,Mais permettre des files d'attente raisonnables.

2、Conception des tâches

La conception des systèmes embarqués commence par l'analyse des besoins,Du point de vue du logiciel,Division des tâches pour des fonctions spécifiques,Est la clé de la conception du logiciel d'application du système d'exploitation en temps réel.Mission(taskOuthread)La question de savoir si la Division est raisonnable aura une incidence directe sur la qualité de la conception du logiciel.、Efficacité et extensibilité de l'exécution.

2.1 Caractéristiques de la tâche

“Mission”L'état est dynamique,C'est qu'il y a une course et une attente,Et bloquer l'attente est nécessaire.Plusieurs tâches sont macro - simultanées,En fait, le bon de commandeCPUC'est le multiplexage par division du temps,Possession indépendante des actifs du système au moment de l'exécution de chaque tâche,Cela conduit également à l'asynchronisation du transfert de données entre les tâches.

Une famille de trois personnes n'a qu'une seule salle de bain.,Temps partagé pour plusieurs personnes,Pas besoin de trois personnes pour trois toilettes,Accès complet aux toilettes par personne,Quand d'autres en ont besoin,Il faut faire la queue ou voir la famille..

Lors de la Division des tâches d'un système embarqué spécifique , Différents angles ont des options différentes , En général, considérez d'abord les exigences et les limites des ressources matérielles .

2.2 Méthode de répartition des tâches

2.2.1 Tâches dépendantes du périphérique

La tâche du système doit être d'accomplir certaines fonctions , Cette fonction est active , Lire les informations 、Périphérique de contrôle, Ou l'exécution passive , Si vous recevez un événement clé .

Selon cette caractéristique, Les tâches peuvent être divisées en “Actif”Et“Passif”Deux.. Une tâche proactive et d'autres tâches envoient une demande d'exécution à cette tâche par l'intermédiaire d'un mécanisme de communication. , Une tâche passive est généralement un service d'interruption (ISR) Et une tâche qui y est associée .Sur cette base, Vous pouvez également combiner la détection de plusieurs périphériques du même type en une seule tâche .

2.2.2 Mission essentielle

“Criticité” L'importance d'une fonction dans un système , Si cette fonction est anormale, elle aura de graves conséquences. , Cette tâche essentielle doit être prioritaire pour les possibilités d'exploitation , Et il détecte les événements 、 La file d'attente des messages ne peut pas manquer , Dans des circonstances particulières, le temps de contrôle doit également être réactif en temps opportun. . Cette tâche doit être prioritaire pour fonctionner , Et sa fonction de tâche doit être séparée autant que possible des autres fonctions , L'indépendance devient une tâche , Il ne doit pas y avoir de blocage ou d'exception en raison d'autres fonctions dans la tâche , Influence sur la réalisation des fonctions clés .

2.2.3 Tâches urgentes

“Urgence” Signifie qu'une fonction doit être autorisée à fonctionner dans un délai déterminé ( Fonctionnement en temps voulu ), Ce type de fonctionnalité a des exigences strictes en temps réel . La plupart des tâches urgentes sont déclenchées par des événements asynchrones , Cette tâche urgente est programmée dans le Service d'interruption correspondant , Ou des tâches aussi prioritaires que possible .Pour atteindre“Terminé à temps”Objet,Doit faire“ Tâches urgentes ” Délai d'exécution le plus court possible . Peler autant que possible “ Pas trop urgent. ”Fonctionnement,C'est tout ce qu'il reste.“Doit être exécuté immédiatement”Fonctionnement, Sera dépouillé “ Pas trop urgent. ” L'opération est encapsulée dans une autre tâche .

2.2.4 Tâches de traitement des données

Le plus grand nombre d'heures de consommation de machines dans les applications utilisateur est généralement une variété d'unités de traitement de l'information , Et souvent plus d'un , Ils servent des fonctions distinctes , Ces unités sont divisées en , Emballé séparément dans différentes tâches . Parce que ces tâches nécessitent plus de machines , Donc la priorité doit être inférieure . Lorsque plusieurs tâches de traitement de données différentes , Les mêmes priorités peuvent être programmées , Rotation des tranches de temps .

2.2.5 Tâche avec les mêmes conditions de déclenchement

Si plusieurs fonctions sont déclenchées par le même événement , Vous pouvez combiner ces fonctions en une seule tâche , Cela réduit la charge de travail des événements distribués à plusieurs tâches . Si l'interruption du bouton - poussoir est détectée, le traitement des données correspondant doit être effectué 、Affichage de l'interface、Contrôle périphérique.Au sein de la Mission, L'ordre d'exécution de chaque fonction doit être défini selon des règles dans la mesure du possible. , S'il y a une relation de cause à effet entre les fonctions , Dans l'ordre de causalité ; Si les fonctions sont complètement indépendantes les unes des autres , Exécuter dans l'ordre de la force et de la faiblesse requises en temps réel .

2.2.6 Exécuter des tâches avec le même cycle

Pour les opérations qui doivent être répétées , Est périodique . Ces fonctions sont regroupées en une seule tâche , Éviter qu'un événement temporel déclenche plusieurs tâches , Élimine la communication entre les opérations de distribution d'événements et elles .

2.2.7 Tâches de fonctionnement séquentielles

Si plusieurs fonctions fonctionnent dans un ordre fixe , Il n'y a rien entre "Concurrence", Essayez de combiner ces fonctions en une seule tâche .

2.3  Analyse de l'ordonnancement des tâches

Après la Division des tâches ,Évaluation des besoinsCPUTaux d'occupation, Afin de déterminer si ces tâches peuvent fonctionner correctement selon le calendrier du système d'exploitation . En d'autres termes, le calcul est effectué sur une période donnée. , La durée maximale d'exécution de chaque tâche et si elle est inférieure à la période , Il est également possible d'identifier grossièrement les tâches les moins prioritaires ( Tâches en attente ) Possibilité d'exécution du cycle , Sinon, le bon fonctionnement du système peut être difficile à garantir .

Lignes de production similaires , Si un lien a expiré , Toute la chaîne de production ne peut pas continuer à fonctionner . Cette situation nécessite une augmentation de la fréquence d'horloge du système ou un remplacement du matériel , Ou optimiser les algorithmes logiciels .

2.4 Type de tâche

La conception des tâches est la base de toute l'application , Il existe trois types d'exécution des tâches: : Classe d'exécution unique 、 Classe d'exécution périodique et classe de déclenchement d'événements .

2.4.1 Tâches exécutées en une seule fois

Ce type de tâche n'est exécuté qu'une seule fois après sa création , Supprimer automatiquement après l'exécution . Avantages une fonction est terminée , Détruire immédiatement les ressources libérées , Mais c'est exactement ça. ,Les inconvénients sont également évidents, La libération n'est pas propre , Ou le traitement incorrect du sémaphore entraîne un blocage permanent des tâches associées . Uniquement pour ne pas communiquer avec d'autres tâches (SaufISRExtérieur) Tâches isolées .

Mais il y en aRTOS Ou emballage secondaire , Les files d'attente de travail sont disponibles (work queue), Plusieurs de ces exigences fonctionnelles , Unified to a fixed Task Execution , Cette tâche fixe n'est pas détruite ,Ça a toujours existé., Recevoir des demandes d'exécution pour d'autres tâches . Similaire à un vélo partagé , Tout le monde est à court de , La personne désignée est responsable de la maintenance et de l'exécution. .

2.4.2 Tâches exécutées périodiquement

Les tâches exécutées périodiquement sont créées une fois ,Utiliserwhile 1Permanent, Hiberner après l'exécution de l'entité de tâche , Réveillez - vous à temps ou déclenchez un délai , Rediriger le cycle de sommeil . Il est important de noter que plus le rapport entre le temps de sommeil et le temps d'exécution des tâches est élevé, mieux c'est , Sinon, l'intervalle de temps accumulera des erreurs . Pour les tâches qui n'exigent pas beaucoup de stabilité périodique , Sinon, seule une interruption programmée indépendante du système d'exploitation peut être utilisée pour déclencher .

2.4.3 Tâche déclenchée par l'événement

L'exécution de ce type de code d'entité de tâche exige d'attendre qu'un événement se produise , Avant l'événement pertinent , Comme obtenir un message de file d'attente ou un blocage sémaphore , La tâche est suspendue en attendant . Un événement connexe s'est produit , Ce code d'entité de tâche est exécuté une fois . Cette tâche peut communiquer avec d'autres tâches , Peut également être déclenché par un temps d'attente passif , Utilisation maximale en général .

2.5 Priorité des tâches

C'est différent.RTOS La portée et la signification de la définition des priorités des tâches varient , Par exemple, plus la valeur est petite, plus la priorité est élevée , Il y a le contraire. ; La plage des valeurs maximales est également liée à la configuration du système .

3、 Conception de fonctions communes

Basé surRTOS Fonctions publiques globales du système , Les conflits d'accès multitâche doivent être pris en considération . C'est comme aller aux toilettes à la maison , Utiliser des ressources privées pour faire ce que vous voulez ; Sortir et aller aux toilettes publiques , L'utilisation de ressources partagées est soumise à certaines règles . Si une tâche appelle une fonction publique , Préempté par une autre tâche hautement prioritaire , Et la tâche hautement prioritaire appelle la fonction publique , Pour éviter de détruire les données de la mission originale , Assurez - vous que ce code est appelé même si plusieurs tâches sont simultanément et plusieurs fois , Les résultats sont les mêmes. , L'accès doit être limité par certaines règles , Deux types de mesures sont généralement utilisés , Appels mutuellement exclusifs et conception réinscriptible .

3.1  Appels mutuellement exclusifs

Considérer les fonctions publiques comme une ressource partagée , Appeler une fonction publique de manière mutuellement exclusive . Si la fonction publique est simple , Temps de fonctionnement très court , L'interruption du premier arrêt peut être utilisée ( Ou désactiver le calendrier ) Appelez à nouveau la fonction publique , Déconnecter après l'appel ( Ou commencer à programmer ), Pour éviter d'autres tâches . Si les fonctions publiques sont complexes ,Longue durée de fonctionnement, Le schéma ci - dessus affecte gravement la performance en temps réel du système , Il est préférable d'équiper cette fonction commune d'un sémaphore mutuellement exclusif , Toute tâche doit obtenir le sémaphore mutex correspondant avant d'appeler cette fonction commune , Sinon, il sera suspendu .

3.2 Conception réinscriptible

La fonction Reentrant permet plusieurs appels imbriqués de tâches , Les données de chaque tâche sont indépendantes les unes des autres ,Ne pas interférer les uns avec les autres, Cette approche est plus directe que l'utilisation d'appels mutuellement exclusifs .

La clé pour concevoir une fonction publique comme une fonction de réentraînement est de ne pas utiliser de ressources globales (Comme les variables globales), Seules les variables locales temporaires peuvent être utilisées , La variable locale est l'allocation temporaire d'espace de stockage au moment de l'appel , Donc différentes tâches appellent cette fonction à différents moments , L'espace de stockage attribué à la même variable locale ne se chevauche pas ,Ne pas interférer les uns avec les autres. Les autres fonctions appelées par la fonction Reentrant doivent également être Reentrant .

3.3 Efficacité opérationnelle

Afin d'assurer l'efficacité opérationnelle et les exigences en temps réel , La fonction essaie de ne pas utiliser le mécanisme d'attente du scrutin , Attente d'hibernation des tâches disponible .

4、 Conception du programme de service d'interruption

Interruption du programme de service(ISR ) Il s'agit d'une méthode de base pour obtenir divers événements dans un système d'application embarqué. ,ISR La qualité de la conception affecte directement l'indice de performance en temps réel et l'efficacité du système .

4.1 Priorité d'interruption

Fixer des priorités différentes pour différents programmes de services d'interruption , Avec la possibilité d'interrompre la nidification , Les interruptions hautement prioritaires sont toujours traitées en temps opportun . Tant que l'interruption n'est pas fermée , Interrompre le programme de service peut interrompre l'exécution de n'importe quelle tâche , Par conséquent, les programmes de service d'interruption peuvent être considérés comme des tâches spéciales qui ont priorité sur les tâches hautement prioritaires. .

4.2  Interruption de la communication avec la tâche associée

La fonction principale de l'interruption est de répondre aux événements asynchrones ,ISR Déclenche juste un événement , Pas trop de traitement en soi , Communiquer les événements asynchrones acquis au traitement des tâches associées .

ISR Il y a deux façons de communiquer avec les tâches associées , Sémaphores et messages : Lorsqu'un sémaphore est utilisé pour communiquer ,ISR Sémaphore seulement , Indique que l'événement s'est produit , Les tâches associées sont déclenchées par la fonction de synchronisation du sémaphore , Tous les travaux spécifiques sont effectués par les tâches associées . Lorsqu'un message de données est utilisé pour communiquer ,ISR Nécessité de compléter la collecte d'informations sur les événements asynchrones , Puis utilisez la boîte aux lettres du message ( Ou file d'attente de messages ) Envoyer les données à la tâche associée , Traitement ultérieur des données par tâche associée .

Quelle est la meilleure façon de,Selon la situation réelle:

Déclencheur ISR La partie de ne contient pas de données : Aucun traitement des données n'est nécessaire pour les événements , Juste une marque spéciale. ,Cette situation ISR Utiliser des sémaphores pour communiquer avec les tâches associées .

Déclencheur ISR L'événement pour est un événement à basse fréquence contenant des données : Le travail de collecte de données est effectué dans le cadre de la tâche associée , Le délai qui en résulte est négligeable par rapport à la période d'échantillonnage ,Dans ce cas,ISR Utiliser des sémaphores pour communiquer avec les tâches associées ,Ce qui simplifieISR.

Déclencheur ISR L'événement pour est un événement de Moyenne fréquence contenant des données : Le travail de collecte de données est effectué dans le cadre de la tâche associée , Les retards peuvent avoir une incidence sur la qualité des données échantillonnées. ,Dans ce cas,, Les travaux de collecte de données devraient être ISR Terminé., Réutiliser la boîte aux lettres du message ( Ou file d'attente de messages ) Communiquer avec les tâches associées , Tâche associée à partir de la boîte aux lettres du message ( Ou file d'attente de messages ) Les données du message , Et terminer le traitement ultérieur .

Déclencheur ISR L'événement pour est non périodique et contient des données “Haute fréquence”Événements:Pour les périodes non périodiques“Haute fréquence”Événements, Son intervalle minimal d'événements peut être inférieur au temps de traitement des données d'événements , Des problèmes de perte de données peuvent survenir si les données sont collectées dans une tâche associée ,Dans ce cas,, Les travaux de collecte de données devraient être ISR Terminé.,Par ISR Communiquer avec les tâches associées à l'aide d'une file d'attente de messages avec un tampon de données , Tâche associée obtenir les données du message de la file d'attente du message , Et terminer le traitement ultérieur .

Certains services d'interruption de plate - forme de puce ne peuvent pas utiliser les fonctions d'interface du système d'exploitation , Impossible d'envoyer un message ou un sémaphore directement ,Un traitement spécial est nécessaire.

5、Synchronisation des comportements

Avec le soutien du système d'exploitation en temps réel , La fonction globale du système est de passer par les tâches individuelles ( Y compris: ISR ) De la coopération , Où la coordination des étapes d'exécution est la synchronisation des comportements .

5.1 Mode de communication pour la synchronisation des comportements

L'exécution d'une tâche nécessite une coordination avec l'exécution d'autres tâches , Pour obtenir l'effet prévu , La coordination entre les tâches s'appelle “Synchronisation des comportements”. Le résultat de la synchronisation des comportements est que les tâches sont exécutées dans un ordre prédéterminé . Le système général d'exploitation en temps réel fournit divers moyens de communication pour répondre aux besoins de différentes situations. , Synchronisation du comportement entre les tâches . Voici une brève description ,C'est différent.RTOS Mais les interfaces sont différentes. , C'est la même chose. .Voir aussi《FreeRTOSEt son application,Longue écriture de dix mille caractères,Introduction de base》.

5.1 1 Réglage du signal binaire

Une variable globale peut simplement être comprise comme 0Ou1, Mais c'est en fait basé sur la mise en œuvre de l'interface système , Prise en charge de la lecture et de l'écriture multitâches . La valeur initiale du sémaphore binaire est 0, Le Contrôleur envoie un signal de synchronisation (put/give), La valeur du sémaphore binaire est 1, Appelé par la partie contrôlée au point de synchronisation de la tâche “Attendez un signal”Fonctions de service pour(get/take), Si la valeur du sémaphore binaire est déjà 1, Réinitialise le sémaphore binaire ( Zéro.) Et continuer à courir ; Si la valeur du sémaphore binaire est 0, Se fait suspendre en attendant le signal du Contrôleur .

Si la partie contrôlée peut toujours répondre en temps opportun aux signaux de la partie contrôlante , Terminer les tâches de traitement appropriées , Et entrer dans l'état d'attente avant le prochain signal , Pour assurer la stabilité . Si la partie contrôlée obtient le signal trop lentement , La partie contrôlante peut avoir envoyé plusieurs signaux , Perte de l'événement signal .

Traiter les informations de synchronisation comme un produit , La partie contrôlante est le producteur du produit , La partie contrôlée est le consommateur du produit . Lorsque le produit “ Temps de production minimal ” Par rapport au produit “ Temps de consommation maximal ” C'est long. , Le produit est toujours “Offre insuffisante ”, Les consommateurs attendent toujours ”, Les produits fabriqués sont immédiatement retirés par les consommateurs , Les producteurs et les consommateurs sont parfaitement synchronisés , Produire un produit consomme immédiatement un . Si la production est trop rapide , Trop tard pour dépenser , Il y a un arriéré de produits , Indique que la tâche peut nécessiter un ajustement des priorités , Ou un signal binaire inapproprié , Un sémaphore de comptage est nécessaire .

5.1.2 Comptez les sémaphores

Tant que le temps moyen de production du produit est supérieur au temps moyen de consommation du produit , Tous les produits sont consommés . Mais il est encore possible qu'il y ait une période temporaire “Arriéré de produits”. Si le temps de production du produit est 20-40 Secondes(Moyenne30Secondes), Le temps de consommation du produit est de 10-30Secondes(Moyenne 20 Secondes), En général, la production est lente 、Consommation rapide, Mais à un moment donné , Le taux de production reste élevé (Chaque20 Deuxième production ), Et la vitesse de consommation reste faible (Chaque30 Une seconde. ), Il y aura un arriéré temporaire de produits .

Le sémaphore binaire ne peut pas être traité “ Arriéré de signaux ”Phénomènes, Les signaux qui ne répondent pas à temps seront abandonnés , Le nombre de réponses effectives est inférieur au nombre réel de signaux émis .Dans ce cas,, L'utilisation d'un signal de comptage est un choix efficace , Dans l'ensemble, il est possible pour la partie contrôlante d'effectuer un contrôle synchrone sur la partie contrôlée , Ne pas perdre le contrôle dans des circonstances exceptionnelles , Assurer une réponse à chaque signal de commande , Malgré des retards occasionnels dans les délais de réponse .

La valeur initiale minimale du signal de comptage est 0, Lorsque le Contrôleur doit envoyer un signal de synchronisation ,Appelle juste“ Envoie un signal ”Fonctions de service pour, Ajouter la valeur du sémaphore de comptage 1, La partie contrôlée est en mission “Point de synchronisation”Appelez“Attendez un signal”Fonctions de service pour. Si la valeur du sémaphore de comptage n'est pas 0, Pour réduire le signal de comptage 1, Et continuer à courir ; Si la valeur du sémaphore de comptage est 0, Je me suis fait suspendre. , Attendez le signal du Contrôleur .

Le signal de comptage s'applique aux signaux émis par la partie contrôlée qui ne peuvent être traités avant l'arrivée du signal suivant. , Mais en général, il répond à tous les signaux .

5.1.3 Event flag Group

Il faut effectuer une opération logique sur plus de deux signaux , Et lorsque le résultat de l'opération logique est utilisé comme signal de commande synchrone , Les moyens de communication simples sont difficiles à mettre en œuvre ,Disponible“Event flag Group”Pour réaliser, Le Groupe Event flag est une combinaison de plusieurs signaux binaires , Plusieurs tâches peuvent être réalisées (Y compris: ISR) Contrôle collaboratif d'une tâche , Quand chaque tâche pertinente (Y compris:ISR) Après avoir envoyé son propre signal , Rendre le drapeau correspondant du Groupe de drapeaux d'événements valide , Le résultat logique prédéterminé est valide , Déclenche une tâche contrôlée .

Les groupes de drapeaux d'événements sont utilisés de manière flexible , Le logo peut être défini comme “1 Ça marche.”, Vous pouvez également définir un drapeau comme “0 Ça marche.”, La relation logique peut être “Logique et”( Tous les signes sont valides ),Ou pour“Logique ou”( Tant que l'un des signes est valide ). Peut être interprété simplement comme une variable , Plusieurs tâches de contrôle contrôlent conjointement les bits correspondants des variables , La tâche contrôlée déclenche l'exécution lorsque tout ou partie des exigences sont respectées .

5.1.4 Message mailbox

Lorsque le comportement est synchronisé avec un sémaphore , Seules les informations de synchronisation peuvent être fournies , Impossible de fournir des informations sur le contenu , Lorsque la partie contrôlante contrôle la partie contrôlée , Lorsque des informations sur le contenu doivent être fournies à la partie contrôlée , Message mailbox est un système efficace .

À propos de mailbox,DifférentRTOS Il existe certaines différences dans la définition fonctionnelle .La plupartRTOS La boîte aux lettres pour ne pas prendre en charge la mise en cache , Envoyer plus tard écrasera l'avant ; Mais il y a des files d'attente de messages comme la version simplifiée ,Prise en charge du cache, C'est juste que le contenu du message est fixé à un pointeur ,Peut être envoyé plusieurs fois;Oui.RTOS Boîte aux lettres non prise en charge .

5.1.5 File d'attente des messages

Les files d'attente de messages sont plus utilisées , La file d'attente peut contenir plusieurs messages , Résoudre efficacement le problème de l'accumulation temporaire des messages , Mais une condition doit encore être remplie , Le temps moyen de production du message est plus long que le temps moyen de consommation du message ,Sinon, Une longue file d'attente de messages débordera .

Faites attention à, Lorsque la quantité de données à transmettre est importante , Pour transmettre son pointeur de contenu ,Pas le contenu lui - même.

5.1.6 Choix du mode de communication

Le mode de communication ci - dessus pour la synchronisation des comportements ,Sélectionner en fonction de la situation réelle:

Lorsque le processus de synchronisation n'exige pas de transfert de contenu spécifique , Sémaphore binaire sélectionnable 、 Comptez les sémaphores et les groupes de drapeaux d'événements .

Lorsque le processus de synchronisation nécessite le transfert de contenu spécifique , Boîte aux lettres de message sélectionnable 、File d'attente des messages.

Quand“ À tout moment, la production d'informations synchrones est plus lente que la consommation d'informations synchrones ”Heure, Sémaphore binaire sélectionnable 、Event flag Group.

Pour les informations de synchronisation non périodiques , Quand il n'y a aucune garantie “ À tout moment, la production d'informations synchrones est plus lente que la consommation d'informations synchrones "Heure, Les sémaphores de comptage avec fonction tampon peuvent être sélectionnés 、File d'attente des messages.

Lorsque le signal de synchronisation est le résultat d'une opération logique sur plusieurs signaux , Utiliser des groupes de drapeaux d'événements comme moyen de synchronisation

5.2 Synchronisation des comportements

Il est essentiel d'établir des priorités raisonnables pour les points de synchronisation et les tâches afin d'obtenir l'effet de synchronisation souhaité .

5.2.1 ISR Synchronisation avec les tâches

Une mission(Ou ISR) Partie contrôlante , Envoyer un message de contrôle , L'autre tâche est la partie contrôlée , L'état de préparation est obtenu après avoir obtenu les informations de contrôle , Si la priorité est suffisamment élevée, l'état de fonctionnement peut être atteint rapidement , Si nécessaire ISR Effectuer un changement de tâche avant de quitter .

Un déclencheur asynchrone ISR Généralement associé à une tâche , C'est une relation synchrone unidirectionnelle entre eux ,AvecISR Les tâches associées sont toujours en attente ,Chaque fois queISR Envoyer un message est déclenché , La structure de la tâche est un événement déclencheur .

5.2.2 Synchronisation unidirectionnelle entre deux tâches

Si la synchronisation unidirectionnelle se produit entre deux tâches , L'effet de synchronisation est lié à la priorité des deux tâches . Lorsque la priorité de la tâche de la partie contrôlante est inférieure à la priorité de la tâche de la partie contrôlée , Message de la tâche du Contrôleur , La tâche de la partie contrôlée est en état de préparation , Et la tâche passe immédiatement à l'état de fonctionnement humain , La synchronisation instantanée fonctionne bien . Lorsque la priorité de la tâche de la partie contrôlante est supérieure à la priorité de la tâche de la partie contrôlée , Lorsque la tâche du Contrôleur envoie un message , Bien que la tâche de la partie contrôlée soit prête , Mais il n'y a pas de changement de tâche , Ce n'est que lorsque le Contrôleur appelle le service système pour hiberner ou se suspendre , Ce n'est que lorsque la tâche de la partie contrôlée a une chance de fonctionner , Mauvaise synchronisation instantanée .Mais, Le Contrôleur appelle la fonction Delay immédiatement après l'envoi du message ( Le délai est supérieur au temps de traitement de la tâche de la partie contrôlée ), S'accrocher volontairement , Faire en sorte que les tâches de la partie contrôlée de faible priorité soient exécutées le plus rapidement possible , Améliore la synchronisation .

5.2.3 Synchronisation bidirectionnelle entre deux tâches

Pendant la synchronisation unidirectionnelle , Il faut s'assurer que le temps moyen de production du message est plus long que le temps moyen de consommation du message , Sinon, une longue file d'attente de messages débordera . Si le producteur du message est un monde physique externe , Son taux de production de messages est objectif , Pour ne pas manquer le message , Seule une vitesse de traitement plus élevée du système peut répondre à .

Si le producteur du message est une tâche au sein du système , Il est possible d'établir un équilibre idéal entre la production et la commercialisation en coordonnant les relations entre les producteurs et les consommateurs. . Les deux parties à la communication se limitent mutuellement ,Les producteurs passent par“Fournir des messages” Pour synchroniser les consommateurs ,Les consommateurs passent par“Répondre aux messages” Pour synchroniser les producteurs , C'est - à - dire que le producteur doit obtenir la réponse du consommateur , Pour produire le prochain message ,Ce mode de fonctionnement est appelé“Synchronisation bidirectionnelle”,Ceci etUART Le contrôle du débit du port série est similaire , En fait, la mise en œuvre est deux fois plus rapide que la synchronisation unidirectionnelle .

5.2.4 Synchronisation multitâche d'une tâche

Lorsque plus de deux tâches sont nécessaires pour synchroniser une tâche , Les moyens de communication simples sont difficiles à mettre en œuvre ,Disponible“Event flag Group”Pour réaliser. Tant que la tâche synchronisée est exécutée assez rapidement , Le nombre de fois qu'il est exécuté “égal à” La somme du nombre de fois que chaque tâche de synchronisation envoie un signal , Sinon, des messages individuels seront manqués. .

5.2.5 Plusieurs tâches synchronisées entre elles

La fréquence de fonctionnement des tâches multiples est constante , C'est - à - dire qu'un ensemble de tâches associées attendent l'une l'autre à un moment donné , Chaque tâche associée doit attendre d'autres tâches lorsqu'elle est exécutée au point de synchronisation , Seules les tâches pertinentes ont atteint le point de synchronisation , Pour quitter le point de synchronisation dans l'ordre de priorité , Afin d'atteindre l'objectif d'une fréquence de fonctionnement uniforme pour les tâches pertinentes . Comme un groupe de personnes qui arrivent individuellement au point de rassemblement désigné , Tout le monde s'est inscrit. , Retournez chez vous. .

Plusieurs tâches synchronisées entre elles , En théorie, les groupes de drapeaux d'événements peuvent être utilisés pour synchroniser plusieurs tâches entre elles , Chaque tâche associée doit être exécutée au point de synchronisation “Inscrivez - vous”,C'est - à - dire appeler“ Envoyer la fonction flag ” Réglez le drapeau correspondant ;Puis appelez“ Get flaggroup flag Function ”Entrer dans l'état d'attente, Lorsque la dernière tâche connexe est exécutée au point de synchronisation et “Inscrivez - vous”Heure, Produit par des opérations logiques “ Tout est là. ”Signal de( Drapeau de synchronisation multitâche ), Et distribuer ce signal de synchronisation à toutes les tâches associées ( En état de préparation)Après, Les tâches connexes sont exécutées par ordre de priorité .Mais, Parce que le fonctionnement de chaque tâche est dynamique , Chaque tâche a la possibilité d'atteindre le dernier point de synchronisation , L'utilisation d'un seul groupe de drapeaux d'événements ne permet pas de déterminer les drapeaux de nettoyage des tâches qui ont atteint le dernier point de synchronisation , Provoque des déclencheurs répétés par erreur .

En fait, en utilisant les variables globales les plus simples , Enregistrer le nombre de tâches synchrones qui sont actuellement arrivées , Les valeurs s'additionnent dans une certaine mesure , Pour déterminer la dernière tâche qui a atteint le point de synchronisation , Le point de resynchronisation de chaque tâche détermine la valeur de comptage , Le signal de synchronisation est ensuite distribué à chaque tâche associée . Cette Variable globale fonctionne sur plusieurs tâches , Un traitement spécial est également nécessaire , C'est - à - dire la synchronisation des ressources dans le chapitre suivant .

6、 Synchronisation des ressources

Par plus de deux unités de programme simultanées (Mission ou1SR ) Les ressources accessibles sont appelées ressources partagées , Les ressources partagées doivent être globales . Mais toutes les ressources mondiales ne sont pas nécessairement partagées , La fixation n'est effectuée que par une seule tâche (Ou ISR ) La ressource globale utilisée n'est pas partagée , C'est la Mission. ( Ou ISR ) Ressources privées , Les opérations de lecture et d'écriture sur les ressources privées ne sont pas limitées .

.Les paragraphes de code où les tâches accèdent aux ressources partagées sont appelés paragraphes clés. , Les paragraphes clés de chaque tâche qui accèdent à la même ressource partagée doivent s'exclure mutuellement , Pour assurer la fiabilité et l'intégrité de l'information sur les ressources partagées . Cette mesure, qui permet à différentes tâches d'accéder à des ressources partagées pour s'assurer que l'information sur les ressources partagées est fiable et complète, est appelée synchronisation des ressources. .

Synchronisation des ressources en cas d'interruption 、 Désactiver le calendrier 、 Utiliser des sémaphores mutuellement exclusifs 、 Plusieurs méthodes de comptage des sémaphores , Ils peuvent tous deux accéder aux ressources partagées , Assurer la fiabilité et l'intégrité de l'information sur les ressources partagées .

La synchronisation des ressources n'est pas nécessaire pour accéder à toutes les ressources partagées , Si la ressource partagée a “Lire seulement”Caractéristiques, Son message ne peut être lu que ,Impossible de réécrire. Ces ressources partagées ont une intégrité et une fiabilité naturelles , Chaque tâche peut être lue à volonté , Comme l'information sur les paramètres matériels solidifiés dans le système . L'accès à la synchronisation des ressources doit être dynamiquement partagé , Enregistrer au moins une tâche ( OuISR) Vous pouvez le faire “Écris.”Fonctionnement.

6.1 Arrêt interrompu

Une tâche est interrompue avant d'accéder à une ressource partagée , Ensuite, exécutez le Code de paragraphe clé pour accéder à la ressource partagée , Ouvrir l'interruption après l'opération .

Quand l'interruption est fermée , Le système perd la capacité de réagir à tous les événements , Impossible de changer de tâche , Cela garantit un accès exclusif aux ressources partagées .( Les interruptions matérielles hautement prioritaires ne sont pas contrôlées par les interruptions d'arrêt du système d'exploitation ,Spécifique etRTOS La mise en œuvre et sa configuration sont liées à )

Lorsqu'une unit é de programme concurrente qui participe à l'accès à une ressource partagée contient ISR Heure, Désactiver les interruptions est la façon la plus simple pour une tâche d'accéder à une ressource partagée , Et c'est la seule façon .

L'avantage de désactiver les interruptions est simple , L'inconvénient est qu'il affecte le temps réel du système . Afin d'atténuer les effets négatifs sur le temps réel du système , Les codes des paragraphes clés pour accéder aux ressources partagées doivent être aussi courts que possible. , Il est absolument interdit d'inclure des fonctions de service système dans un code de paragraphe clé qui pourraient vous suspendre , Sinon, le système s'écrasera .

Lorsque des ressources partagées sont nécessaires “Écris.”Au moment de la visite, D'abord. “Écrire” L'information est prête à l'avance , Stocké dans sa propre structure de données locale , Cette structure de données locale est la même que celle de la partie accessible de la ressource partagée ,Et puis éteignez l'interruption, Il suffit de copier le contenu d'une structure de données locale dans une ressource partagée dans un code de paragraphe clé , La copie est terminée et peut être interrompue ; Parce que les deux ont la même structure de données , Donc le Code de paragraphe clé pour la fonction de copie est naturellement très simple 、 Rapide.

Lorsque des ressources partagées sont nécessaires “Lire”Au moment de la visite, Préparer une structure de données locale identique à celle de la partie accessible de la ressource partagée ,Et puis éteignez l'interruption, Il suffit de copier le contenu de la ressource partagée dans la structure de données locale dans le Code de paragraphe clé , Une fois la copie terminée, elle peut être interrompue. . Après avoir quitté le Code du paragraphe clé , Ensuite, les informations copiées dans la structure de données locale sont corrélées .

Parce que l'arrêt affecte directement la performance en temps réel du système , Par conséquent, il ne peut être utilisé que pour un accès court à des ressources partagées simples , Généralement utilisé pour accéder à des variables globales ou à de petites structures de données globales .

6.2 Désactiver le calendrier

Lorsque les ressources partagées sont complexes ou à grande échelle , La méthode de désactivation de l'interruption n'est pas recommandée . Si tous les utilisateurs de cette ressource partagée sont des tâches ( C'est - à - dire qu'il ne contient pas ISR ), Pour accéder aux ressources partagées en utilisant la méthode de programmation off .

La méthode d'arrêt de l'ordonnancement arrête le fonctionnement de l'ordonnanceur des tâches du système d'exploitation , Impossible de changer de tâche , .Cela garantit que l'exécution des codes de paragraphes clés ne sera pas perturbée par d'autres tâches .

L'interruption n'a pas été fermée parce que la méthode d'arrêt du calendrier , Par conséquent, le système peut encore réagir en temps opportun à divers événements asynchrones , Et mettre les tâches connexes en état de préparation , Mais pas immédiatement en état de marche . C'est aussi l'inconvénient de l'ordonnancement , Toutes les missions impliquées , Même si leur priorité est suffisamment élevée pour être ISR Le déclenchement à l'état de préparation ne fonctionne pas non plus .

Pendant l'arrêt de l'expédition , L'accès aux ressources partagées doit être effectué aussi rapidement que possible , Pour réduire le temps d'arrêt . Si une fonction de service système est appelée pendant l'horaire d'arrêt et suspendue , Aucune autre tâche ne peut être exécutée , Le système va s'écraser. . Les avantages de la méthode de synchronisation des ressources sont limités. ,Pas mal.,Ne pas utiliser autant que possible.

6.3 Utiliser des sémaphores mutuellement exclusifs

Lorsque les ressources partagées à accéder sont complexes , Et le processus d'accès est relativement coûteux ,Arrêt interrompu、 Les mesures visant à réduire la litière ne sont pas souhaitables. , Il a un impact grave sur la performance en temps réel du système . Si tous les utilisateurs de cette ressource partagée sont des tâches ( C'est - à - dire qu'il ne contient pas ISR), Peut être accédé par des sémaphores mutuellement exclusifs .

Mais l'utilisation de sémaphores comporte certains risques ,Peut - être. Inversion des priorités ( L'inversion des priorités fait référence aux ressources partagées dont une tâche de faible priorité a besoin pour détenir une tâche de haute priorité. , Les tâches hautement prioritaires doivent attendre que les tâches peu prioritaires libèrent des ressources pour accéder à . S'il y a une tâche prioritaire entre les deux , Et pas besoin de cette ressource partagée , La tâche prioritaire a la priorité la plus élevée en termes d'effet de fonctionnement réel . Si une tâche hautement prioritaire attend une ressource sans bloquer l'attente , Il s'agit plutôt d'un test d'occupation cyclique , La tâche de faible priorité ne peut pas être exécutée , Utilisation constante des ressources partagées , La conséquence est que les tâches hautement prioritaires ne peuvent pas obtenir de ressources en attente , Le système est en état de mort simulée ).

Il existe deux solutions, Définir la limite supérieure de priorité , Donner une priorité élevée à la zone critique , Toutes les missions entrant dans la zone critique recevront cette priorité élevée , Les autres missions qui tentent d'entrer dans la zone critique ont moins de priorité que cette priorité élevée , Il n'y a pas d'inversion de priorité ; Un autre scénario est l'héritage prioritaire , Lorsqu'une tâche hautement prioritaire attend les ressources détenues par une tâche peu prioritaire , Les tâches de faible priorité recevront temporairement la priorité du processus de priorité élevée , Après la libération des ressources partagées , Tâches de faible priorité revenir au niveau de priorité initial . Cela ne nécessite pas d'attention ou de mise en oeuvre de la demande ,Parce queRTOS Un sémaphore mutuellement exclusif (mutex) Avec la fonction de traitement de l'inversion de priorité , Particulièrement adapté à l'accès exclusif aux ressources partagées .

Les sémaphores mutuellement exclusifs sont différents des sémaphores binaires utilisés pour la synchronisation des comportements , La valeur initiale du sémaphore mutuellement exclusif est 1(unlock), Indique que la ressource partagée est valide ( Non utilisé ), Lorsqu'une tâche nécessite l'accès à une ressource partagée , Obtenez d'abord le sémaphore mutex correspondant à cette ressource partagée (lock), Attendre si elle est déjà occupée par une autre tâche ;Si l'acquisition est réussie, La ressource partagée n'a pas été utilisée par d'autres tâches , Vous pouvez utiliser cette ressource partagée , Les sémaphores mutuellement exclusifs doivent être envoyés à temps après la fin de l'utilisation , Libérer la ressource partagée , Pour d'autres tâches . C'est analogue à entrer dans les toilettes publiques , Assurez - vous que la porte n'est pas verrouillée , Fermez la porte immédiatement après l'entrée. , Déverrouillez quand vous aurez fini , Autres talents disponibles .

Lorsque vous accédez à une ressource partagée en utilisant des sémaphores mutuellement exclusifs , Il n'y a pas de limite à l'interruption et à l'ordonnancement des tâches , Le système peut normalement répondre à divers événements asynchrones , D'autres tâches hautement prioritaires qui ne sont pas liées à cette ressource partagée peuvent encore être exécutées en temps opportun ( Même si la tâche exécute un code de paragraphe critique ),Donc,, L'utilisation de sémaphores mutuellement exclusifs pour l'accès aux ressources partagées a un impact minimal sur le temps réel du système .

Lors de la synchronisation des ressources avec des sémaphores mutuellement exclusifs , N'importe quelle tâche peut être utilisée jusqu'à ce qu'elle ne soit pas nécessaire une fois qu'une ressource partagée est disponible , Aucune autre priorité de tâche ne peut priver l'utilisateur . La raison en est que la tâche d'obtenir des ressources partagées a une priorité temporaire élevée ( Valeur d'héritage prioritaire ), Aucune autre tâche nécessitant l'accès à la même ressource partagée n'est aussi prioritaire . La valeur d'héritage prioritaire doit être supérieure à la priorité de toutes les tâches nécessitant l'accès à cette ressource partagée. .

Il est important de noter que, La valeur d'héritage de priorité ne peut pas correspondre à la priorité d'une autre tâche , Vous devez utiliser un 、 Valeur de priorité supérieure à toutes les tâches qui utilisent la ressource partagée , Lors de la définition initiale des priorités, ne priorisez pas trop les tâches , Laissez un peu d'espace entre .

6.4 Utiliser des sémaphores de comptage

Lorsqu'il y a plus d'une entité pour le même type de ressource partagée , Permettre à plus d'une tâche d'utiliser cette ressource partagée en même temps , Mais les entités de ressources partagées utilisées pour chaque tâche sont différentes , ..C'est - à - dire que l'utilisation de chaque entité reste mutuellement exclusive .

Dans le système d'application embarqué ,Entités multiples, Comme le multiplex. ADC,MulticanalUART, Correspond en fait à différentes ressources matérielles ,Ce n'est pas exactement le même, Ne pas utiliser de façon sélective , C'est - à - dire que la gestion des sémaphores de comptage sensoriel n'a aucun sens pratique pour les ressources partagées Multi - entités ,Pour multiplexADCOuUART, En général, plusieurs sémaphores mutuellement exclusifs ou des sémaphores binaires sont utilisés pour gérer l'un des canaux individuellement .

7、Communication des données

Pendant le fonctionnement du système,ISR Entre les tâches 、 La communication de données doit nécessairement accompagner la tâche et la tâche , Le mode de communication le plus approprié peut être choisi en fonction de la situation réelle. .

7.1 Variables globales

Variables globales( Y compris les tableaux globaux et les structures globales ) Peut agir comme une ressource partagée , Pour transférer des données entre les tâches , Tâche ou ISR Écrire des variables globales , Tâches utilisant des données ou ISR Lire les variables globales , Cela permet la transmission de données . Dans ce cas, la variable globale agit comme une ressource partagée , L'accès doit suivre les règles de synchronisation des ressources .

Les variables globales permettent le transfert de données , Mais la synchronisation du comportement n'est pas possible , C'est - à - dire que les utilisateurs concernés ne sont pas automatiquement informés après la production de nouvelles données , Les utilisateurs ne savent pas non plus quand les données actuelles ont été mises à jour ,Donc,, Les variables globales ne peuvent être utilisées qu'entre les tâches qui n'ont pas d'exigences de synchronisation de comportement , C'est - à - dire que chaque nouvelle donnée générée n'exige pas une utilisation immédiate , Peut même ne pas être utilisé .

Sans exigence de synchronisation du comportement , Et la quantité de données transférées est faible , La synchronisation des ressources avec des variables globales et des interruptions est l'approche la plus efficace .

Il y en a aussi.Un cas particulier, Quand il n'y a qu'une seule tâche pour écrire sur une ressource partagée , Et sa priorité est supérieure à toutes les autres avancées Tâche de lecture de ligne , Peut être écrit sans interruption , Parce qu'il n'est pas possible d'obtenir des droits d'exécution pour une tâche de lecture de faible priorité , Les tâches de lecture de faible priorité doivent utiliser des mesures d'interruption pour accéder aux variables globales .

7.2 Bloc de mémoire

Si la quantité de données à transmettre est importante , L'utilisation de blocs de mémoire pour stocker les données est l'option la plus appropriée , C'est - à - dire la fonction de gestion dynamique de la mémoire , Le système d'exploitation s'adapte généralement aux applications de mémoire dynamique 、 Interface libérée , Et prend en charge la rentrée .

Si le pointeur d'adresse de l'espace mémoire demandé est une variable globale , Il est utilisé comme une variable globale , Les règles de synchronisation des ressources doivent être respectées . En fait, il est moins utilisé indépendamment , En général, un tampon de contenu pour le mode de communication de la file d'attente de messages , Utiliser l'adresse du bloc mémoire demandée comme variable temporaire , Transmission en tant que paramètre du contenu du message .

7.3 Message mailbox

Lorsque les données transmises exigent que le destinataire les reçoive et les traite en temps opportun , Synchronisation du comportement pendant la communication des données , Lorsque l'exécution des deux côtés de la communication est périodique ( Et même période )Heure, La boîte aux lettres de message est un outil de communication approprié .(A condition que:RTOSPrise en charge des boîtes aux lettres, Sans cache , Un seul message peut être envoyé à la fois ).

Lors de l'envoi d'un message à l'aide d'une boîte aux lettres de message , En fait, seuls les pointeurs sont envoyés ( Adresse du message 〉, Quel que soit le type de données du message lui - même , Tous les pointeurs envoyés sont pressés void *Traitement, Une fois que le destinataire a reçu ce pointeur de message , Force le type de pointeur pour obtenir le contenu réel du message .

Le contenu de la boîte aux lettres peut envoyer des constantes directement ( Ou les données sont forcées au type de pointeur ,Parce que les variables100Et pointeur100,L'essence est100Ce numéro). Si vous envoyez l'adresse de la variable , Assurez - vous que la variable elle - même n'est pas détruite , Généralement l'adresse d'une variable globale ou d'une variable locale statique .

7.4 File d'attente des messages

Parce qu'il ne peut y avoir qu'un seul message dans la boîte aux lettres du message (SectionRTOS La fonction message de la boîte aux lettres est différente , Mais la file d'attente des messages ,Tous lesRTOS Ils sont tous d'accord. ). Au moins une des Parties à la communication n'a pas de période d'exécution fixe , Il n'y a aucune garantie que le message sera toujours traité avant le prochain message , Message manquant possible , Cette condition devrait utiliser une file d'attente de messages tamponnée , En fait, les files d'attente de messages sont les plus utilisées .

La file d'attente est une structure linéaire standard ,Envoi de messages、 La réception est l'entrée ou la sortie du message. .Au niveau de l'utilisateur, Envoyer un message, c'est mettre le contenu du message en file d'attente , Recevoir un message, c'est retirer un message de la file d'attente .

La structure du contenu du message et la longueur de la file d'attente du message sont définies par l'utilisateur lui - même , La longueur des messages est déterminée par le pire des cas d'arriéré de messages , C'est trop court. , Trop long pour gaspiller la mémoire .La file d'attente est FIFO, Mais vous pouvez choisir entre la tête ou la queue de la file d'attente , La priorité de mise en oeuvre peut être réduite pour les messages importants .

Les exigences relatives au contenu des messages sont les mêmes que pour les boîtes aux lettres de messages. , Vous devez vous assurer que la tâche qui reçoit le message récupère les données , Impossible d'utiliser des variables temporaires ; Vous ne pouvez pas non plus utiliser un grand nombre de blocs , La mémoire peut être appliquée dynamiquement , Le message est transmis par son pointeur , Réaliser le transfert de données massives .

8 、Gestion du temps

Le système d'exploitation peut être commuté entre plusieurs tâches , C'est - à - dire qu'un minuteur système interrompt à une certaine fréquence , Fournir un calendrier pour le système (Changement de contexte)Basculer les tâches. Et ce minuteur , C'est le rythme du système. (tick),Calendrier des tâches、 Les retards de sommeil sont basés sur le rythme , Le temps correspondant à un rythme varie ,Configuration générale1-10ms.

Plus le temps correspondant au rythme est petit , Plus le système est en temps réel , Mais trop petit peut conduire à des changements fréquents de tâches et affecter l'efficacité de l'exécution des tâches .

Les fonctions de service de gestion du temps sont traitées en temps système , Dans le pire des cas, l'erreur est proche d'un rythme systématique ,Donc,, Les fonctions de service de gestion du temps ne peuvent être utilisées que dans les cas où la précision du temps n'est pas requise , Ou des occasions avec des intervalles plus longs .

原网站

版权声明
本文为[Chaussures pour enfants de la classe d'à côté]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/180/202206290448565976.html