Upload
vophuc
View
217
Download
0
Embed Size (px)
Citation preview
Systèmes embarquésSystèmes embarqués
Introduction à la programmationIntroduction à la programmationmicro-contrôleurmicro-contrôleur
avec un OS temps réelavec un OS temps réel
Julien Deantoni
V0.3 – 2018
Merci à Jean-Philippe Babau et Gabriel Frey pour m'avoir permi la réutilisation d'une partie de leurs supports
Introduction aux Systèmes et Logiciels Embarqués 3
Pourquoi ce cours ?
● Différents types ee systèmes embarrqués
● smarrtphones / Différents garegets / box
● Avionique / Automobile / Charîne ee proeuction
● Carfetière, arquarrium, etc
● Différents besoins
● Pars e'OS
● OS temps réel eéeiés
● Linux embarrqués ou pseueo Linux
Thales Alenia Space: stratobus and satellites
Renault Autonomous Car
Introduction aux Systèmes et Logiciels Embarqués 4
Pourquoi ce cours ?
● Différents types ee systèmes embarrqués
● smarrtphones / Différents garegets / box
● Avionique / Automobile / Chaîne de production● Cafetière, aquarium, etc
● Différents besoins
● Pas d'OS ● OS temps réel dédiés● Linux embarrqués ou pseueo Linux
Introduction aux Systèmes et Logiciels Embarqués 5
Contenu du cours
● Générarlités
● Les sytèmes consieérés
● Le eéveloppement ee tels systèmes
● Prograrmmartion arvec un OS temps réel…
● Mise en oeuvre
● Prograrmmartion sarns OS
Introduction aux Systèmes et Logiciels Embarqués 6
Les systèmes embarqués considérés
● Systèmes temps réels
● En charrge eu contrôle e'un processus
● Liés à lar eynarmique eu processus à contrôler
● Soumis à ees contrarintes temporelles
Introduction aux Systèmes et Logiciels Embarqués 7
Les systèmes embarqués considérés
● Systèmes temps réels
● Pars forcément rarpiees (contrarirement arux ieées reçues)
● Préeictibles
● (Souvent) Fortement enfouis
Introduction aux Systèmes et Logiciels Embarqués 8
Les systèmes embarqués considérés
● Systèmes temps réels
● Contrarintes martérielles fortes● Mémoire● Coût
● Tarille
● Consommation
Introduction aux Systèmes et Logiciels Embarqués 9
Les systèmes embarqués considérés
● Systèmes Critiques
● Une farille peut mettre ees vies (ou lar mission…) en earnger ● Régularteur ee vitesse● ABS
● Préeictibilité arccrue (eéterminisme)
Introduction aux Systèmes et Logiciels Embarqués 10
Notions importantes
Prédictibilité
● On veut pouvoir préeire le comportement e'un système
● Fonctionnel: le comportement est eéterministe, i.e. un même jeu ee eonnée en entrée proeuit toujours lar même sortie
● Temporel: le carlcul eoit être farit arvarnt ees échéarnces eéterminées
Introduction aux Systèmes et Logiciels Embarqués 11
Notions importantes
Prédictibilité
● On veut pouvoir préeire le comportement e'un système
● Fonctionnel: le comportement est eéterministe, i.e. un même jeu ee eonnée en entrée proeuit toujours lar même sortie
● Temporel: le carlcul eoit être farit arvarnt ees échéances déterminées
Introduction aux Systèmes et Logiciels Embarqués 12
Notions importantes
concurrence
● Lar spécifcartion eu système est pensée ee marnière concurrente
● Carr l'environnement est parrarllèle (composés ee processus ineépenearnts ou fariblement couplés: le moteur, les essuis glarce, l’opérarteur, etc)
● Carr le système est composé ee plusieurs arctivités plus ou moins critiques se farisarnt à ees rythmes eistincts.
Introduction aux Systèmes et Logiciels Embarqués 13
Malentendus fréquents(*)
● Système temps réel = système rarpiee et performarnt.
● Lar prograrmmartion temps réel = arssembleur.
● Aucune science eerrière le eéveloppement
Darns les systèmes temps réel, tout est une question ee bieouillarge.
(*) J. A. Stankovic, « Misconceptions about realtime computing »
Introduction aux Systèmes et Logiciels Embarqués 14
Malentendus fréquents(*)
● L’arugmentartion ee lar vitesse ees processeurs var résouere les problèmes engenerés parr le temps réel.
(*) J. A. Stankovic, « Misconceptions about realtime computing »
Introduction aux Systèmes et Logiciels Embarqués 17
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 18
Le développement de systèmes temps réel version simple :-)
● Différence forte machine hôte / machine cibleMarchine hôte :
● Entrées / Sortie Starnearre
● IDE (spécifques ou pars)
● Simulartion ee lar cible / environnement / processus
Introduction aux Systèmes et Logiciels Embarqués 19
Marchine cible :
● Entrées / Sorties ?
● Difficilement utilisarble hors ee son environnement
Le développement de systèmes temps réel version simple :-)
● Différence forte machine hôte / machine cible
Introduction aux Systèmes et Logiciels Embarqués 20
● Méthoee ee varlieartion (fonction ee lar criticité)
● Utilisartion ee méthoees formelles
● Tests (critères ee couverture)
● Simulartion fonctionnelle (exharustive ou non) sur marchine hôte
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 21
● Méthoee ee varlieartion (fonction ee lar criticité)
● Utilisartion ee méthoees formelles
● Tests (critères ee couverture)
● Simulartion fonctionnelle (exharustive ou non) sur marchine hôte
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 22
● Critères ee varlieartion● Temporelle● Énergétique ● Empreinte mémoire● ...
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 23
● Cross compilartion (compilartion croisée)● Jeu e'instruction spécifque● Confgurartion martérielle spécifque
● En parrticulier marpping mémoire● Avec informartion ee eébuggarge (elf) ou non (s19)
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 24
● Cross compilartion et varlieartion ?
● Re-varlieartion eu coee généré
● Compilarteurs certifés● Réponeent à ees critères stricts ee générartion
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 25
● Trarnsfert ( jtarg / SPI / ...)● Simple uploare● Trarnsfert et pilotarge
● Permet le eebug● Maris l'environnement et le process ?
Le développement de systèmes temps réel version simple :-)
Introduction aux Systèmes et Logiciels Embarqués 26
Contenu du cours
● Générarlités
● Les sytèmes consieérés
● Le eéveloppement ee systèmes temps réel
● Prograrmmartion Micro-contrôleur arvec un OS temps réel…
● Mise en oeuvre
Introduction aux Systèmes et Logiciels Embarqués 27
Micro-contrôleur ?
AT90S8535AT90S8535
Introduction aux Systèmes et Logiciels Embarqués 28
Micro-contrôleur ?
● Processeur
● Mémoire
● Périphériques
● Bus ee communicartion
● Entrées / Sorties
→
AT90S8535AT90S8535
Dans le même boitier
19.04.18 Julien DeAntoni 29
● Mettre en place votre environnement de développement
– Choisir un langage de développement● Assembleur● C / C++● Ada● ...
– Trouver / choisir un compilateur adapté– Trouver un linker (pour faire le transfert)– Trouver / choisir un simulateur si disponible– Se procurer les datasheets du micro-contrôleur
Micro-contrôleur sans OS : comment ?
19.04.18 Julien DeAntoni 30
● Les datasheets en quelques mots
– C'est la documentation du micro-contrôleur– Sont généralement très conséquentes (567 pages pour le
processeur des cartes arduino ! )– Ne contiennent pas que des choses utiles pour les
informaticiens– Réverbatif si on ne sait pas ce que l'on cherche
Micro-contrôleur sans OS : comment ?
Ce n'est pas un roman donc à moins de vouloir devenir expert des moindres fonctionnalités, ne le lisez pas séquentiellement
19.04.18 Julien DeAntoni 31
● Informations importantes des datasheets– Les ports d'Entrées / Sorties (et Brochages des pattes
physiques)
– La description des périphériques intégrés● Timer ? Convertisseurs A/D ? liaison série ?
– L'organisation de la mémoire● Intégrée ou non
– Les registres
● Informations moins importantes
– Caractéristiques éléctriques (sauf les consos dans les différents mode de veille)
– Jeux d'instructions assembleur (a moins que...)
Micro-contrôleur sans OS : comment ?
19.04.18 Julien DeAntoni 32
● Les ports d'Entrées / Sorties– Permettent de communiquer avec l'electronique de la
machine (notamment les capteurs et les actionneurs)– Plus ou moins nombreux– Multi fonctionnalités– Multi Directionnels
ATMEGA328PATMEGA328P
Micro-contrôleur sans OS : comment ?
19.04.18 Julien DeAntoni 33
● Les ports d'Entrées / Sorties– Permettent de communiquer avec l'electronique de la
machine (notamment les capteurs et les actionneurs)– Plus ou moins nombreux– Multi fonctionnalités– Multi Directionnels
ATMEGA328PATMEGA328P
Micro-contrôleur sans OS : comment ?
19.04.18 Julien DeAntoni 34
● Les registres de configuration– Souvent nombreux– 8 / 16 / 32 bits– À une adresse mémoire particulière– À considérer bit par bit
Datasheets PIC16F84ADatasheets PIC16F84A
Micro-contrôleur sans OS : les registres
Finite State Machine, State Charts 35
Contenu du cours
● Générarlités
● Les sytèmes consieérés
● Le eéveloppement ee systèmes temps réel
● Prograrmmartion Micro-contrôleur arvec un OS temps réel…
● Mise en oeuvre
Introduction aux Systèmes et Logiciels Embarqués 36
Contenu du cours
● Qu'est-ce qu'un OS temps réel (RTOS)
● RTOS vs GPOS
● Différents RTOS...
● Les objets communs e'un RTOS
● Implémentartion e'un RTOS
● Prograrmmartion arvec un OS temps réel
● Comment utiliser les objets e'un RTOS ?
● Mise en Oeuvre
● freeRTOS
Introduction aux Systèmes et Logiciels Embarqués 37
Contenu du cours
● Qu'est-ce qu'un OS temps réel (RTOS)● RTOS vs GPOS● Différents RTOS...
● Les objets communs e'un RTOS
● Les objets harut nivearu e'un RTOS
● Implémentartion e'un RTOS
● Prograrmmartion arvec un OS temps réel
● Comment utiliser les objets e'un RTOS ?
● Mise en Oeuvre
Introduction aux Systèmes et Logiciels Embarqués 38
RTOS vs GPOS● L'essence de la discorde : Prédictabilité1
●RTOS●Multi-tâche / threare eepuis toujours●Ses arctions sont eétermistes...● ...et interruptibles
●GPOS●Multi-tâche seulement récemment●Prenes lar marin sur les tâches en cours...●Pour une eurée ineéterminée et non interruptible
1 : Ou Déterminisme...http://embedded-computing.com/pdfs/QNX.Jan05.pdf
Introduction aux Systèmes et Logiciels Embarqués 39
RTOS vs GPOS● L'essence de la discorde : Prédictabilité1
●RTOS●Multi-tâche / threare eepuis toujours●Ses arctions sont eétermistes...● ...et interruptibles
●GPOS●Multi-tâche seulement récemment●Prenes lar marin sur les tâches en cours...●Pour une eurée ineéterminée et non interruptible
1 : Ou Déterminisme...http://embedded-computing.com/pdfs/QNX.Jan05.pdf
Un RTOS n'est paséquitable (fair)
Introduction aux Systèmes et Logiciels Embarqués 40
Contenu du cours
● Qu'est-ce qu'un OS temps réel (RTOS)● RTOS vs GPOS
● Différents RTOS...● Les objets communs e'un RTOS
● Les objets harut nivearu e'un RTOS
● Implémentartion e'un RTOS
● Prograrmmartion arvec un OS temps réel
● Comment utiliser les objets e'un RTOS ?
● Mise en Oeuvre
Introduction aux Systèmes et Logiciels Embarqués 41
Différents RTOS Le classique (1)
●Complétement eéveloppé aru eessus eu martériel, il fournit les objets starnearres e'un RTOS
●Utilisartion ee l'API eu RTOS parr l'arpplicartion
●Tout est intercepté parr le RTOS (même les interruptions)
Introduction aux Systèmes et Logiciels Embarqués 42
Différents RTOS Le classique (1)
●Complétement eéveloppé aru eessus eu martériel, il fournit les objets starnearres e'un RTOS
●Utilisartion ee l'API eu RTOS parr l'arpplicartion
●Larisse à l'arpplicartion certarins arccès aru martériel
Introduction aux Systèmes et Logiciels Embarqués 43
Différents RTOS Le classique (1)
●Complétement eéveloppé aru eessus eu martériel, il fournit les objets starnearres e'un RTOS
●Utilisartion ee l'API eu RTOS parr l'arpplicartion
●Larisse à l'arpplicartion certarins arccès aru martériel
FAILURE
Introduction aux Systèmes et Logiciels Embarqués 44
Différents RTOS Le classique (1)
●Complétement eéveloppé aru eessus eu martériel, il fournit les objets starnearres e'un RTOS
●Utilisartion ee l'API eu RTOS parr l'arpplicartion
●Larisse à l'arpplicartion certarins arccès aru martériel
FAILURE
FAILURE
Introduction aux Systèmes et Logiciels Embarqués 45
Différents RTOS safety-critical
●Permet e'isoler temporellement et en mémoire ees arpplicartions eifférentes
● Utilisation de l'API du RTOS par l'application
● S'assure que le partitionnement est respecté
Introduction aux Systèmes et Logiciels Embarqués 46
Différents RTOS safety-critical
●Permet e'isoler temporellement et en mémoire ees arpplicartions eifférentes
● Utilisation de l'API du RTOS par l'application
● S'assure que le partitionnement est respecté
→ Évite la propagation des pannes
FAILURE
Introduction aux Systèmes et Logiciels Embarqués 47
Différents RTOS safety-critical
●Permet e'isoler temporellement et en mémoire ees arpplicartions eifférentes
● Utilisation de l'API du RTOS par l'application
● S'assure que le partitionnement est respecté
→ Évite la propagation des pannes
FAILURE OK
OK
Introduction aux Systèmes et Logiciels Embarqués 48
Différents RTOS safety-critical
●Permet e'isoler temporellement et en mémoire ees arpplicartions eifférentes
● Utilisation de l'API du RTOS par l'application
● S'assure que le partitionnement est respecté
→ Évite la propagation des pannes
FAILURE OK
OK
Introduction aux Systèmes et Logiciels Embarqués 49
Contenu du cours● Qu'est-ce qu'un OS temps réel (RTOS)
● RTOS vs GPOS
● Différents RTOS...
● Les objets communs d'un RTOS● Tâche● Sémarphore● Oreonnarnceur● Les objets harut nivearu
● Implémentartion e'un RTOS
● Prograrmmartion arvec un OS temps réel
● Mise en Oeuvre
Introduction aux Systèmes et Logiciels Embarqués 50
Les objets du temps réelles basiques
●Les objets prograrmmarbles● Lar tâche (ou le threare ou processus léger)● Les routines e’interruption, l’arlarrme
●Objet ee communicartion● Le sémarphore
● Synchronisation● Exclusion mutuelle
Introduction aux Systèmes et Logiciels Embarqués 51
● Une tâche est un fil d'exécution● Une tâche est représentée par une structure1
contenant :● Un identifiant● Une référence vers son code● Une priorité● Un état :
● Prête● Bloquée● En cours● ...
● Un contexte• valeurs des registres• compteur de programme• pile
Les objets du temps réella tâche
1 : Souvent appelée TaskControlBlock
typedef struct{ void *r_stack; // Start of stack (top address-1) void (*start) (void); // Entry point of code pProcessID pid; // Pointer to Process ID block unsigned char priority; // Priority of task (0-255)} FLASH const TaskControlBlock;
//state is encoded in the schedulertypedef struct ProcessID{ struct ProcessID * next; unsigned char fags; unsigned char priority; void *ContextPointer;#ifdef SINGLESTEPSUPPORT unsigned char * bp1; unsigned char * bp2;#endif} * pProcessId; Exemple simplifié d'AvrX
Introduction aux Systèmes et Logiciels Embarqués 52
Primitives classiques :● Appel effectué depuis une autre tâche
● créartion (prête ou bloquée)● Larncement● Réveil
● Appel effectué depuis une autre tâche ou dans la tâche elle-même
● Destruction● Suspension ● Demarnee eu nivearu ee priorité● Charngement ee priorité
● Appel dans la tâche elle même● mise en sommeil● arppels ee fonctions
INTERFACE void AvrXRunTask(TaskControlBlock *);INTERFACE unsigned char AvrXInitTask(TaskControlBlock *);
INTERFACE void AvrXResume(pProcessID);INTERFACE void AvrXSuspend(pProcessID);INTERFACE void AvrXBreakPoint(pProcessID);INTERFACE unsigned char AvrXSingleStep(pProcessID);INTERFACE unsigned char AvrXSingleStepNext(pProcessID);
INTERFACE void AvrXTerminate(pProcessID);INTERFACE void AvrXTaskExit(void);INTERFACE void AvrXHalt(void); // Halt Processor (error only)
INTERFACE void AvrXWaitTask(pProcessID);INTERFACE Mutex AvrXTestPid(pProcessID);
INTERFACE unsigned char AvrXPriority(pProcessID);INTERFACE unsigned char AvrXChangePriority(pProcessID, unsigned char);INTERFACE pProcessID AvrXSelf(void);
Les objets du temps réella tâche
Exemple d'AvrX
Introduction aux Systèmes et Logiciels Embarqués 53
Exemple de primitives● VxWorks
● LOCAL int taskSpawn(char* "taskName",int priority,0,10000, functionName,0,0,0,0,0, \\ 0,0,0,0,0)● LOCAL int taskInit(…)● taskSafe ()
● IRMX● static TOKEN rq_create_task(priority, (void far *) taskId, ...)
● Win CE● CreateProcess( NULL|appliName, "MonProcessFils", … )● HANDLE CreateThread(lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, \\
dwCreationFlags, CREATE_SUSPENDED, lpThreadId )● RT-Linux
● int init_module(void)● int pthread_create(pthread_t, pthread_attr_t , void *(*start_routine)(void*), void *arg)
● TIM micro-kernel● int install_task (char * taskName, int stackSize, void * functionAd);
● RTX_166 Tiny Real-Time● os_create_task (int tasd_id); ● os_delete_task (int tasd_id);
Les objets du temps réella tâche
Introduction aux Systèmes et Logiciels Embarqués 54
Les objets du temps réella tâche
prêteprêteInit()
en-coursen-cours
bloquéebloquéeSusp-endueSusp-endue
Élection
Pré-emption
API: Blocksémaphoretimer, etc
Événementsémaphore
timer expire,etc
Suspend()
Resume()
Suspend()
Suspend()
État d'une tâche :● prête
● mémoire arllouées● bloquée
● en arttente e'une ressource ou e'un événement
● suspeneue● en mémoire maris ne serar
pars oreonnarncée● en-cours
● Choisie parr l'oreonnarnceur pour s'exécuter
● Morte● Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 55
prêteprêteInit()
en-coursen-cours
bloquéebloquéeSusp-endueSusp-endue
Élection
Pré-emption
API: Blocksémaphoretimer, etc
Événementsémaphore
timer expire,etc
Suspend()
Resume()
Suspend()
Suspend()
Les objets du temps réella tâcheÉtat d'une tâche :
● prête● mémoire arllouées
● bloquée● en arttente e'une ressource
ou e'un événement● suspeneue
● en mémoire maris ne serar pars oreonnarncée
● en-cours● Choisie parr l'oreonnarnceur
pour s'exécuter● Morte
● Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 56
prêteprêteInit()
en-coursen-cours
bloquéebloquéeSusp-endueSusp-endue
Élection
Pré-emption
API: Blocksémaphoretimer, etc
Événementsémaphore
timer expire,etc
Suspend()
Resume()Suspend()
Suspend()
Les objets du temps réella tâcheÉtat d'une tâche :
● prête● mémoire arllouées
● bloquée● en arttente e'une ressource
ou e'un événement● suspeneue
● en mémoire maris ne serar pars oreonnarncée
● en-cours● Choisie parr l'oreonnarnceur
pour s'exécuter● Morte
● Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 57
prêteprêteInit()
en-coursen-cours
bloquéebloquéeSusp-endueSusp-endue
Élection
Pré-emption
API: Blocksémaphoretimer, etc
Événementsémaphore
timer expire,etc
Suspend()
Resume()
Suspend()
Suspend()
Les objets du temps réella tâcheÉtat d'une tâche :
● prête● mémoire arllouées
● bloquée● en arttente e'une ressource
ou e'un événement● suspeneue
● en mémoire maris ne serar pars oreonnarncée
● en-cours● Choisie parr l'oreonnarnceur
pour s'exécuter● Morte
● Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 58
prêteprêteInit()
en-coursen-cours
bloquéebloquéeSusp-endueSusp-endue
Élection
Pré-emption
API: Blocksémaphoretimer, etc
Événementsémaphore
timer expire,etc
Suspend()
Resume()
Suspend()
Suspend()
Les objets du temps réella tâcheÉtat d'une tâche :
● prête● mémoire arllouées
● bloquée● en arttente e'une ressource
ou e'un événement● suspeneue
● en mémoire maris ne serar pars oreonnarncée
● en-cours● Choisie parr l'oreonnarnceur
pour s'exécuter● Morte
● Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 59
prêteprêteInit()
en-coursen-cours
bloquéebloquéeSusp-endueSusp-endue
Élection
Pré-emption
API: Blocksémaphoretimer, etc
Événementsémaphore
timer expire,etc
Suspend()
Resume()
Suspend()
Suspend()
Exit() Terminate()
Exit() Terminate()
Exit() Terminate()
Exit() Terminate()
morte
Les objets du temps réella tâcheÉtat d'une tâche :
● prête● mémoire arllouées
● bloquée● en arttente e'une ressource
ou e'un événement● suspeneue
● en mémoire maris ne serar pars oreonnarncée
● en-cours● Choisie parr l'oreonnarnceur
pour s'exécuter● Morte
● Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 60
Les objets du temps réella tâche
Tâche clarssique :
● Initiarlisartion (varriarbles, etc)
● Boucle infnie● Farire quelques choses● Attenere
● Ressource● Timer● Sémarphore
AVRX_GCC_TASKDEF(task1, 8, 3){unsigned char valueD=0;PORTD = valueD; while (1) { AvrXStartTimer(&timer1, 20); // 20 ms delay AvrXWaitTimer(&timer1); PORTD=++valueD; // Modify PORTD }} Exemple AvrX
Introduction aux Systèmes et Logiciels Embarqués 61
Les objets du temps réella tâche
Tâche clarssique :
● Initiarlisartion (varriarbles, etc)
● Boucle infnie● Farire quelques choses● Attenere
● Ressource● Timer● Sémarphore
AVRX_GCC_TASKDEF(task1, 8, 3){unsigned char valueD=0;PORTD = valueD; while (1) { AvrXStartTimer(&timer1, 20); // 20 ms delay PORTD=++valueD; // Modify PORTD AvrXWaitTimer(&timer1); }} Exemple AvrX
Introduction aux Systèmes et Logiciels Embarqués 62
Les objets du temps réelroutine d'interruption
Interruption clarssique :
● Démarsque ees ITs (ou non)
● Farire le minimum ee chose● MAJ e'une varriarble● Moeifcartion e'un sémarphore
● Fin
AVRX_SIGINT(TIMER0_OVF_vect){ IntProlog(); // Save interrupted context, switch stacks TCNT0 = TCNT0_INIT; // Reload the timer counter AvrXTimerHandler(); // Process Timer queue Epilog(); // Restore context of next running task}
Exemple AvrX
Introduction aux Systèmes et Logiciels Embarqués 63
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 64
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisation entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 65
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisation entre tâches● exclusion mutuelle● Interruption logicielle
www.lisyc.univ-brest.fr/pages_perso/babau/cours/multitache.pdfLacatre: langage d'aide à la conception d'application temps réel
Introduction aux Systèmes et Logiciels Embarqués 66
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisation entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 67
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisation entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 68
Les objets du temps réelle sémaphore
✘
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 69
Les objets du temps réelle sémaphore
✘
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 70
Les objets du temps réelle sémaphore (2)
✔
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 71
Les objets du temps réelle sémaphore (3 ?)
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 72
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 73
Les objets du temps réelle sémaphore
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
Introduction aux Systèmes et Logiciels Embarqués 74
● Type : booléen ou à compte
● Possèee ees primitives parrticulières :● Ces primitives sont artomic !!
● Décrémenter() //ne peut pars être < 0● Incrémenter()
● Rôle● synchronisartion entre tâches● exclusion mutuelle● Interruption logicielle
● Accès par fle d’attente ● FIFO● PRIORITY
Les objets du temps réelle sémaphore
Introduction aux Systèmes et Logiciels Embarqués 75
● Primitives clarssiques
● Créartion● Initiarlisartion
● Destruction● imparct sur l ’arpplicartion
● Dépôt (incrémentartion)● nombre e’unité
● Retrarit (eécrémentartion)● nombre e’unité ● temps e’arttente
● Infni● fni
void AvrXSetSemaphore(pMutex); //blockingvoid AvrXIntSetSemaphore(pMutex); //non blockingvoid AvrXWaitSemaphore(pMutex);Mutex AvrXTestSemaphore(pMutex); //blockingMutex AvrXIntTestSemaphore(pMutex); //non blockingvoid AvrXResetSemaphore(pMutex);void AvrXResetObjectSemaphore(pMutex);
Les objets du temps réelle sémaphore
Exemple d'AvrX
Introduction aux Systèmes et Logiciels Embarqués 76
Exemples ee primitives● VxWorks
semId = semBCreate(SEM_Q_FIFO | SEM_Q_PRIORITY, SEM_FULL | SEM_EMPTY) ;semId = semCCreate(SEM_Q_FIFO | SEM_Q_PRIORITY, initCount) ;semId = semMCreate(SEM_Q_FIFO | SEM_Q_PRIORITY |SEM_DELETE_SAFE| SEM_INVERSION_SAFE)status = semGive(semId)status = semFlush(semId) ; /* déblocage de toutes les tâches en attentestatus = semTake(semId, temps | WAIT_FOREVER | NO_WAIT) ;
● iRMXsemId_tk = rq_create_semaphore(valInit,valMax,fags,&status) ;rq_send_units(semId,nbUnite,&status)reste = rq_receive_units(semId_tk,nbUnite,temps,&status)
● Win32HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES, InitialCount, MaximumCount, lpName);ReleaseSemaphore ( semhandle , unitNumber , 0 )WaitForSingleObject ( sem , INFINITE | Time-out ) // timeout en ms
● TIM micro-kernel : pars ee « sémarphore »
Les objets du temps réelle sémaphore
Introduction aux Systèmes et Logiciels Embarqués 77
● Moee préemptif● Oreonnarnceur arppelé arprès charque charngement e’étart
• Appel des primitives de communication• Après une routine (si déblocage possible d’une tâche)
● Moee non préemptif● Oreonnarnceur arppelé à lar fn ee tâche / boucle
● tarsk_suspene(), tarsk_exit()
● Oreonnarncement clarssique ● Roune Robin● Roune Robin parr priorités● EDF (earrliest eeareline frst) / RMA (rarte monotonic
arnarlysis)
Les objets du temps réell'ordonnanceur
Introduction aux Systèmes et Logiciels Embarqués 78
● Moee préemptif● Oreonnarnceur arppelé arprès charque charngement e’étart
• Appel des primitives de communication• Après une routine (si déblocage possible d’une tâche)
● Moee non préemptif● Oreonnarnceur arppelé à lar fn ee tâche / boucle
● tarsk_suspene(), tarsk_exit()
● Blocarge ee l’oreonnarnceur● Parssarge en moee non préemptif● Exécution ee primitives système● Primitives spécifques
Les objets du temps réell'ordonnanceur
On en parlela semaine prochaine
Introduction aux Systèmes et Logiciels Embarqués 79
● Pas de nombre limité (théoriquement)
● attente non active (pour le micro-contrôleur)
● Différentes stratégies :
● 1 tâche spécifique qui modifie plusieurs sémaphores lors de l'expiration d'un timer (pas forcément les même à chaque fois) (période ≅ timer)
● Appel d'un timer dans la tâche concernée (période dépendante du temps d'exécution des calculs)
Les objets du temps réeltimer logiciel (1)
Introduction aux Systèmes et Logiciels Embarqués 80
● Événement● synchronisartion entre tâches● reneez-vous
● Boîte aux lettres (FIFO)● échange d’information synchronisées entre tâches
● objet ee communicartion entre lecteurs/écrivarins
● Pipe● écharnge e’informartion synchronisées entre tâches ee processus
eistinct● objet ee communicartion entre lecteurs/écrivarins
Les objets du temps réelobjets haut-niveau
Introduction aux Systèmes et Logiciels Embarqués 81
Contenu du cours
● Qu'est-ce qu'un OS temps réel (RTOS)● RTOS vs GPOS
● Différents RTOS...
● Les objets communs e'un RTOS
● Implémentation d'un RTOS
● Prograrmmartion arvec un OS temps réel
● Mise en Oeuvre
Introduction aux Systèmes et Logiciels Embarqués 82
● Barse ee temps unique pour le système➔ Mise en plarce e’une interruption périoeique : compteur ee ticks
● Activartion e’un timer● intervarlle ee X ms (10, 200, ...)● peut souvent être moeifée
● Tous les ticks //si pré-emptif :● L'OS prene lar marin● L'OS incrémente le compteur ee tick● Vérife si ees timers logiciels ont expiré
● Moeife ees sémarphores ou l'étart ees tâches selon● Ré-oreonnarnce si ees charngement ont eu lieu
● L'OS rene lar marin
Implémentation d'un RTOSgestion du temps
Introduction aux Systèmes et Logiciels Embarqués 87
Contenu du cours
● Qu'est-ce qu'un OS temps réel (RTOS)● RTOS vs GPOS
● Différents RTOS...
● Les objets communs e'un RTOS
● Implémentartion e'un RTOS
● Programmation avec un OS temps réel
● Mise en Oeuvre
Introduction aux Systèmes et Logiciels Embarqués 90
Programmation avec un RTOSles tâches
Principe :
Une tâche par préoccupation, exemple : Lecture des capteurs : 1 (ou plusieurs) tâche Calcul : 1 (ou plusieurs) tâches Écriture sur actionneurs : 1 (ou plusieurs) tâche
Chaque tâche a son propre rythme Périodique (déclenchée par timer) Déclenchée par des handlers d'interruptions externes
Éviter la création de tâche dynamique
Introduction aux Systèmes et Logiciels Embarqués 91
Programmation avec un RTOSles tâches (2)
Principe :
Introduction aux Systèmes et Logiciels Embarqués 92
● Rôle● entité logique ou physique● peut être parrtargée parr plusieurs tâches
● Objet non présent en tarnt que tel earns un OS
● Type ee ressource● structure ee eonnées / zone mémoire● fchier● eispositif physique ● résearu
Programmation avec un RTOSles ressources
Introduction aux Systèmes et Logiciels Embarqués 93
Programmation avec un RTOSles ressources
●Sémarphore e'exclusion mutuelle
●Parssarge en moee non préemptif ou super-priorité
●Marsquarge / eémarsquarge ees interruptions● Pars trop longtemps !
●Opérartion artomique● Difficile à arssurer si on réutilise un OS existarnt
Introduction aux Systèmes et Logiciels Embarqués 97
● Normes● SCEPTRE (1982)● POSIX (Unix)● OSEK/VDX (Automobile)● Profl MARTE ee l’OMG ?● Autosarr ?
● Domarine● Ferroviarire : l’OS préconisé est QNX● Avionique: Arinc
● Supports● Martériel : processeurs supportés, carrtes, mémoire (4 Go sous CE)● Drivers (série, LCD, CAN), piles ee protocole● Fournisseurs et suivi ees versions
Choix d’un RTOS critères
● Coûts● Environnement ee eéveloppement
● (Tornareo 15 000 € sarns fonctionnarlités)● Royarlties (royarlty free)● Développement supplémentarires
● Drivers, protocole
Introduction aux Systèmes et Logiciels Embarqués 98
● Optimisartion ees ressources● Critères ee tarille et/ou ee performarnce
● Le comportement ee l’arpplicartif est connu / estimé
● Le comportement eu support est confgurarble parr l’arpplicartion
● Réutilisartion earns plusieurs contextes arpplicartifs● Services varriés, services ee harut nivearu
● Utilisartion ee librariries
● Aearptarbilité pour les systèmes ouverts ● Gestion eynarmique ee composarnts ou ee services
● Instarllartion, arjout/retrarit, …
Choix d’un RTOS critères
Maintenabilité Accès au code traçabilité des appels
Portabilité Respect de normes
Introduction aux Systèmes et Logiciels Embarqués 99
Contenu du cours
● Qu'est-ce qu'un OS temps réel (RTOS)● RTOS vs GPOS
● Différents RTOS...
● Les objets communs e'un RTOS
● Implémentartion e'un RTOS
● Prograrmmartion arvec un OS temps réel
● Mise en Oeuvre● FreeRtos: http://freertos.org
Introduction aux Systèmes et Logiciels Embarqués 101
Conclusion micro-contrôleur avec un RTOS
● Des concepts génériques...● Tâches, sémarphores, etc
● … maris mises en œuvre spécifques
● Implémentartion● Liée arux spécifcités eu martériel (mémoire, IT)
➔ Une couche de portage spécifique par cible● Simple et préeictible en temps
➔ Allocations statiques
● Choix selon l’utilisartion● Critères : coût (environnement et royarlties, formartion ees équipes ee
eéveloppement), arccès aru coee, eéveloppements spécifques, tarille, préeictibilité, eurée ee vie eu proeuit, quarlité ees fournisseurs
Bien lire les spécifications
Maitrise du HW, prédiction a priori
Phase à ne pas négliger
19.04.18 Julien DeAntoni 102
● AVR-GCC and co
– Cross compilateur basé sur gcc– Linker (avrudude) , librairies pour architecture
spécifiques (avr-libc)– Windows / Linux➔ http://www.avrfreaks.net/wiki/index.php/Documentation:AVR_GCC
● ICCAVR
– Cross compilateur propriétaire Atmel– Windows
➔ CD fourni
Mise en oeuvre: La chaîne de compilation
19.04.18 Julien DeAntoni 103
● Définition des handlers différentes selon le compilateurs / linkers
– AVR-gcc
– ICCAVR
//handler de l'interruption nommées INT_COMPAISR(INT_COMPA_vect){ // traiter l'interruption}
//handler de l'interruption numéro NUM #pragma nom_fonction_handler ISR:NUM[...]nom_fonction_handler{ // traiter l'interruption }
Mise en oeuvre: La chaîne de compilation
19.04.18 Julien DeAntoni 104
● Code C classique
– Arrêt des interruptions– Configuration des registres– Démarrage des interruptions– Boucle sans fin
● Forte utilisation des nombres hexadécimaux / binaire
1 1 0 1 0 0 1 1binaire
Dhexa 3
Décimal 211
Mise en oeuvre: Le code
19.04.18 Julien DeAntoni 105
● Utilisation de types de données simples
– Unsigned char = 8bits– Unsigned int = 16 bits➔ Les multiplications et divisions par des puissances
de 2 se font par un simple décalage à gauche ou à droite
● Des pages avec quelques rappels basiques :– http://wiki.jelectronique.com/doku.php?id=codage
– http://wiki.jelectronique.com/doku.php?id=fonctions_logiques
Mise en oeuvre: Le code