Tout système qui a une réponse déterministe à un événement donné
Système défaillant
Système qui ne répond pas à une exigence de synchronisation
Les exigences en temps réel peuvent varier considérablement, à la fois dans la vitesse de l'exigence de synchronisation et la gravité des conséquences si les délais en temps réel requis ne sont pas respectés
MCU lisant l'ADC
1. L'ADC affirme une ligne matérielle, signalant qu'une conversion a été effectuée et qu'elle est prête pour que le MCU transfère la lecture dans sa mémoire interne
2. Le MCU qui lit le CAN a jusqu'à 20 ms pour transférer les données du CAN à la mémoire interne avant qu'une nouvelle lecture ne soit effectuée
3. Le MCU doit également exécuter l'algorithme de contrôle pour calculer les valeurs actualisées de la sortie du chauffage à 5 Hz (200 ms)
Moyens de garantir un comportement en temps réel
Résister à l'envie de trop compliquer une tâche simple
Faire en sorte que le système soit aussi simple que possible tout en répondant aux exigences
Types de systèmes en temps réel
Matériel
Micrologiciel de type "bare-metal"
Micrologiciel basé sur un RTOS
Logiciel basé sur un RTOS
Systèmes en temps réel basés sur le matériel
Effectuer des opérations en parallèle et instantanément
Consommer moins d'énergie qu'une solution basée sur un MCU
Inconvénients du matériel en temps réel
Manque de flexibilité des dispositifs non programmables
Expertise requise généralement moins disponible que celle des développeurs de logiciels/micrologiciels
Coût élevé des dispositifs programmables complets
Coût élevé du développement d'un ASIC personnalisé
Micrologiciel de type "bare-metal"
Le code de l'utilisateur a le contrôle total de tous les aspects du matériel
Le seul moyen d'interrompre l'exécution du code de la boucle principale est de déclencher une interruption
Micrologiciel basé sur un RTOS
L'introduction de l'ordonnanceur et de certains primitifs RTOS permet aux tâches de fonctionner avec l'illusion qu'elles ont le processeur pour elles-mêmes
L'utilisation d'un RTOS permet au système de rester réactif aux événements les plus importants tout en exécutant d'autres tâches complexes en arrière-plan
Des interdépendances peuvent apparaître entre les tâches qui partagent des données, ce qui peut entraîner le blocage inattendu d'une tâche
Logiciels basés sur un RTOS
Plus de cœurs de processeurs disponibles fonctionnant à des fréquences d'horloge plus élevées
Gigaoctets de mémoire vive (RAM) et de mémoire persistante disponibles
Ajout de matériel périphérique peut être aussi simple que l'ajout d'une carte
Multitude de solutions open source et propriétaires pour les piles de réseaux, le développement d'interfaces utilisateur, la gestion des fichiers, etc.
Le noyau est toujours implémenté de manière à ce que les tâches critiques ne soient pas bloquées pendant une période de temps indéfinie
RTOS
Système d'exploitation qui fournit au programmeur d'applications de nombreuses primitives différentes (telles que les threads et les mutex) qui peuvent être utilisées pour créer des programmes en temps réel
Logiciels pour les piles de réseaux, le développement d'interfaces utilisateur, la gestion des fichiers, etc.
Solutions open source
Solutions propriétaires
Sous toutes ces capacités et options, le noyau est toujours implémenté de manière à ce que les tâches critiques ne soient pas bloquées pendant une période de temps indéfinie, ce qui est possible avec un système d'exploitation traditionnel
Il est toujours possible d'obtenir des performances déterministes, tout comme avec un microprogramme RTOS
Système d'exploitation
Fournit un environnement de programmation cohérent qui fait abstraction du matériel sous-jacent afin de faciliter l'écriture et la maintenance des programmes informatiques
Primitives fournies aux programmeurs d'applications
Threads
Mutex
Programme multithread avec accès protégé à des données partagées
1. Création de threads
2. Utilisation de mutex
Avantages d'utiliser les primitives du système d'exploitation
Code de l'application moins complexe
Plus facile à comprendre
Mêmes primitives utilisées quel que soit le programmeur
Meilleure portabilité du matériel
Système en temps réel dur
Doit respecter son délai 100% du temps, sinon considéré comme un échec
Systèmes en temps réel dur
Dispositifs médicaux (stimulateurs cardiaques)
Systèmes de contrôle avec paramètres contrôlés de manière extrêmement stricte
Système en temps réel ferme
Doit respecter ses délais presque tout le temps
Système en temps réel souple
Offre une promesse de meilleur effort pour respecter les délais
Système en temps réel souple
Régulateur de vitesse d'une voiture
Gamme de RTOS
RTOS 8-32 bits axés sur les MCU (FreeRTOS, Keil RTX, Micrium μC, ThreadX, etc.)
RTOS pour processeurs d'application 32 et 64 bits (Wind River VxWorks, Wind River Linux, Integrity OS de Green Hills, Linux avec PREEMPT_RT)
FreeRTOS est l'une des implémentations de RTOS les plus populaires pour les MCU et est très largement disponible
FreeRTOS existe depuis plus de 15 ans et a été porté sur des dizaines de plateformes
En se concentrant sur FreeRTOS, on sera bien placé pour migrer rapidement sa connaissance vers d'autres matériels ou pour passer à un autre RTOS si nécessaire
CEG4566/CSI4541/SEG4545 est le code du cours "Conception de systèmes informatiques en temps réel"
Le cours est donné en hiver 2024
Le professeur est Mohamed Ali Ibrahim, ing., Ph.D.
Super-boucle
Boucle infinie dans laquelle des fonctions sont appelées de manière séquentielle
Réaliser des opérations parallèles avec des super-boucles
1. Utiliser les interruptions
2. Utiliser le DMA (contrôleur d'accès direct à la mémoire)
Sujets abordés
Introduction à la programmation en super-boucles
Réaliser des opérations parallèles avec des super-boucles
Comparaison entre les tâches RTOS et les super-boucles
Réaliser des opérations parallèles avec des tâches RTOS
Tâches RTOS et super boucles - avantages et inconvénients
Caractéristiques des super-boucles
Elles n'ont pas de point de sortie
Le code intégré est généralement censé être toujours disponible
Exemple de super-boucle
void main ( void )
while(1)
{
func1() ;
func2() ;
func3() ;
//font des choses utiles, mais ne renvoient rien
//(sinon, où irions-nous... que ferions-nous... ?!)
}
Limites des super-boucles
Tout retard introduit par une fonction se propage à la fonction suivante
La fréquence à laquelle les événements externes sont vérifiés dépend du temps d'exécution des fonctions
Risque de gigue (différence de temps non constante) dans la détection des événements
Déterminisme
Capacité d'un système à répondre de manière fiable à un événement dans un délai spécifié
Interruptions
Signaux envoyés au microcontrôleur pour l'informer d'un événement et le faire passer à une routine de service d'interruption (ISR)
Caractéristiques des ISR
Elles doivent être les plus courtes possible pour minimiser le temps passé dans l'interruption
Elles peuvent être imbriquées et avoir des priorités différentes