Introduction à la programmation
micro-contrôleur
avec un OS temps réel
Julien Deantoni
V0.3 – 2018
Pourquoi ce cours ?
●
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
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 / 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 4
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
●
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 6
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 7
Les systèmes embarqués considérés
●
Systèmes temps réels
●
Contrarintes martérielles fortes
●
Mémoire ●
Tarille
●
Coût ●
Consommation
●
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 9
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
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
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.
●
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.
●
L’arugmentartion ee lar vitesse ees processeurs var résouere les
problèmes engenerés parr le temps réel.
●
Différence forte machine hôte / machine cible
Marchine 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 18
Le développement de systèmes temps réel
version simple :-)
●
Différence forte machine hôte / machine cible
Marchine cible :
●
Entrées / Sorties ?
●
Difficilement utilisarble hors ee son environnement
Introduction aux Systèmes et Logiciels Embarqués 19
Le développement de systèmes temps réel
version simple :-)
●
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
Introduction aux Systèmes et Logiciels Embarqués 20
Le développement de systèmes temps réel
version simple :-)
●
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
Introduction aux Systèmes et Logiciels Embarqués 21
Le développement de systèmes temps réel
version simple :-)
●
Critères ee varlieartion
●
Temporelle
●
Énergétique
●
Empreinte mémoire
●
...
Introduction aux Systèmes et Logiciels Embarqués 22
Le développement de systèmes temps réel
version simple :-)
●
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)
Introduction aux Systèmes et Logiciels Embarqués 23
Le développement de systèmes temps réel
version simple :-)
●
Cross compilartion et varlieartion ?
●
Re-varlieartion eu coee généré
●
Compilarteurs certifés
●
Réponeent à ees critères stricts ee générartion
Introduction aux Systèmes et Logiciels Embarqués 24
Le développement de systèmes temps réel
version simple :-)
●
Trarnsfert ( jtarg / SPI / ...)
●
Simple uploare
●
Trarnsfert et pilotarge
●
Permet le eebug
●
Maris l'environnement et le process ?
Introduction aux Systèmes et Logiciels Embarqués 25
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
●
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
19.04.18 Julien DeAntoni 29
Micro-contrôleur sans OS : comment ?
●
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
●
Informations moins importantes
– Caractéristiques éléctriques (sauf les consos dans les différents
mode de veille)
– Jeux d'instructions assembleur (a moins que...)
19.04.18 Julien DeAntoni 31
Micro-contrôleur sans OS : comment ?
●
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
ATMEGA328P
ATMEGA328P
Datasheets PIC16F84A
●
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
●
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
http://embedded-computing.com/pdfs/QNX.Jan05.pdf 1 : Ou Déterminisme...
●
RTOS
●
Multi-tâche / threare eepuis toujours
●
Ses arctions sont eétermistes...
●
...et interruptibles Un RTOS n'est pas
●
GPOS équitable (fair)
●
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
http://embedded-computing.com/pdfs/QNX.Jan05.pdf 1 : Ou Déterminisme...
●
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)
●
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
●
Complétement eéveloppé aru eessus eu
martériel, il fournit les objets starnearres e'un
RTOS
●
Utilisartion ee l'API eu RTOS FAILURE
parr l'arpplicartion
●
Larisse à l'arpplicartion certarins
arccès aru martériel
●
Complétement eéveloppé aru eessus eu
martériel, il fournit les objets starnearres e'un
RTOS
●
Utilisartion ee l'API eu RTOS FAILURE
parr l'arpplicartion
●
Larisse à l'arpplicartion certarins FAILURE
arccès aru martériel
●
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é
●
Permet e'isoler temporellement et en
mémoire ees arpplicartions eifférentes
●
Utilisation de l'API du
FAILURE
RTOS par l'application
●
S'assure que le
partitionnement est
respecté
●
Permet e'isoler temporellement et en
mémoire ees arpplicartions eifférentes
●
Utilisation de l'API du
FAILURE
RTOS par l'application OK
●
S'assure que le
partitionnement est
respecté OK
●
Permet e'isoler temporellement et en
mémoire ees arpplicartions eifférentes
●
Utilisation de l'API du
FAILURE
RTOS par l'application OK
●
S'assure que le
partitionnement est
respecté OK
●
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
●
Prête typedef struct ProcessID
{ //state is encoded in the scheduler
●
Bloquée struct ProcessID * next;
unsigned char fags;
●
En cours unsigned char priority;
void *ContextPointer;
●
... #ifdef SINGLESTEPSUPPORT
unsigned char * bp1;
●
Un contexte unsigned char * bp2;
#endif
} * pProcessId; Exemple simplifié d'AvrX
• valeurs des registres
• Introduction
compteurauxde programme
Systèmes et Logiciels Embarqués 51
Les objets du temps réel
la tâche
Primitives classiques :
●
Appel effectué depuis une autre tâche
●
créartion (prête ou bloquée)
●
Larncement
●
Réveil
INTERFACE void AvrXRunTask(TaskControlBlock *);
●
Appel effectué depuis une autre tâche INTERFACE unsigned char AvrXInitTask(TaskControlBlock *);
ou dans la tâche elle-même
INTERFACE void AvrXResume(pProcessID);
●
Destruction INTERFACE void AvrXSuspend(pProcessID);
INTERFACE void AvrXBreakPoint(pProcessID);
●
Suspension INTERFACE unsigned char AvrXSingleStep(pProcessID);
INTERFACE unsigned char AvrXSingleStepNext(pProcessID);
●
Demarnee eu nivearu ee priorité
INTERFACE void AvrXTerminate(pProcessID);
●
Charngement ee priorité INTERFACE void AvrXTaskExit(void);
INTERFACE void AvrXHalt(void); // Halt Processor (error only)
●
Appel dans la tâche elle même INTERFACE void AvrXWaitTask(pProcessID);
INTERFACE Mutex AvrXTestPid(pProcessID);
●
mise en sommeil
INTERFACE unsigned char AvrXPriority(pProcessID);
●
arppels ee fonctions INTERFACE unsigned char AvrXChangePriority(pProcessID, unsigned char);
INTERFACE pProcessID AvrXSelf(void);
Exemple d'AvrX
●
suspeneue Suspend()
●
en mémoire maris ne serar Événement API: Block
Suspend() Resume() sémaphore sémaphore
pars oreonnarncée timer expire,etc timer, etc
●
en-cours
●
Choisie parr l'oreonnarnceur Susp-
Susp- Suspend()
bloquée
bloquée
pour s'exécuter endue
endue
●
Morte
●
Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 54
Les objets du temps réel
État d'une tâche : la tâche
●
prête
●
mémoire arllouées
●
bloquée
Élection
●
en arttente e'une ressource Init()
prête
prête en-cours
en-cours
ou e'un événement Pré-emption
●
suspeneue Suspend()
●
en mémoire maris ne serar Événement API: Block
Suspend() Resume() sémaphore sémaphore
pars oreonnarncée timer expire,etc timer, etc
●
en-cours
●
Choisie parr l'oreonnarnceur Susp-
Susp- Suspend()
bloquée
bloquée
pour s'exécuter endue
endue
●
Morte
●
Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 55
Les objets du temps réel
État d'une tâche : la tâche
●
prête
●
mémoire arllouées
●
bloquée
Élection
●
en arttente e'une ressource Init()
prête
prête en-cours
en-cours
ou e'un événement Pré-emption
●
suspeneue Suspend
()
●
en mémoire maris ne serar Événement API: Block
Suspend() Resume() sémaphore sémaphore
pars oreonnarncée timer expire,etc timer, etc
●
en-cours
●
Choisie parr l'oreonnarnceur Susp-
Susp- Suspend()
bloquée
bloquée
pour s'exécuter endue
endue
●
Morte
●
Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 56
Les objets du temps réel
État d'une tâche : la tâche
●
prête
●
mémoire arllouées
●
bloquée
Élection
●
en arttente e'une ressource Init()
prête
prête en-cours
en-cours
ou e'un événement Pré-emption
●
suspeneue Suspend()
●
en mémoire maris ne serar Événement API: Block
Suspend() Resume() sémaphore sémaphore
pars oreonnarncée timer expire,etc timer, etc
●
en-cours
●
Choisie parr l'oreonnarnceur Susp-
Susp- Suspend() bloquée
bloquée
pour s'exécuter endue
endue
●
Morte
●
Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 57
Les objets du temps réel
État d'une tâche : la tâche
●
prête
●
mémoire arllouées
●
bloquée
Élection
●
en arttente e'une ressource Init()
prête
prête en-cours
en-cours
ou e'un événement Pré-emption
●
suspeneue Suspend()
●
en mémoire maris ne serar Événement API: Block
Suspend() Resume() sémaphore sémaphore
pars oreonnarncée timer expire,etc timer, etc
●
en-cours
●
Choisie parr l'oreonnarnceur Susp-
Susp- Suspend()
bloquée
bloquée
pour s'exécuter endue
endue
●
Morte
●
Plus ee mémoire arllouée
Introduction aux Systèmes et Logiciels Embarqués 58
Les objets du temps réel
État d'une tâche : la tâche
●
prête
●
mémoire arllouées
Élection
●
bloquée Init()
prête
prête en-cours
en-cours
●
en arttente e'une ressource Pré-emption
●
Plus ee mémoire arllouée
morte
Introduction aux Systèmes et Logiciels Embarqués 59
Les objets du temps réel
la tâche
Tâche clarssique :
●
Initiarlisartion (varriarbles, etc)
●
Boucle infnie
●
Farire quelques choses
●
Attenere
AVRX_GCC_TASKDEF(task1, 8, 3)
●
Ressource {
unsigned char valueD=0;
●
Timer PORTD = valueD;
while (1)
●
Sémarphore {
AvrXStartTimer(&timer1, 20); // 20 ms delay
AvrXWaitTimer(&timer1);
PORTD=++valueD; // Modify PORTD
}
} Exemple AvrX
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
●
iRMX
semId_tk = rq_create_semaphore(valInit,valMax,fags,&status) ;
rq_send_units(semId,nbUnite,&status)
reste = rq_receive_units(semId_tk,nbUnite,temps,&status)
●
Win32
HANDLE 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 »
●
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)
●
Moee non préemptif
●
Oreonnarnceur arppelé à lar fn ee tâche / boucle
●
tarsk_suspene(), tarsk_exit()
●
On en parle
Blocarge ee l’oreonnarnceur
●
Parssarge enlamoee
semaine prochaine
non préemptif
●
Exécution ee primitives système
●
Primitives spécifques
●
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)
●
É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
●
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
●
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
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
●
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
●
Réutilisartion earns plusieurs contextes arpplicartifs
Services varriés, services ee harut nivearu
Maintenabilité
●
●
Utilisartion ee librariries
Accès au code
traçabilité des appels
●
Aearptarbilité pour les systèmes ouverts
●
Gestion eynarmique ee composarnts ou ee services
●
Instarllartion, arjout/retrarit, …
Portabilité
Respect de normes
●
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
●
ICCAVR
– Cross compilateur propriétaire Atmel
– Windows
➔ CD fourni
– ICCAVR
//handler de l'interruption numéro NUM
#pragma nom_fonction_handler ISR:NUM
[...]
nom_fonction_handler
{
// traiter l'interruption
}
19.04.18 Julien DeAntoni 103
Mise en oeuvre: Le code
●
Code C classique
– Arrêt des interruptions
– Configuration des registres
– Démarrage des interruptions
– Boucle sans fin
●
Forte utilisation des nombres hexadécimaux / binaire
binaire 1 1 0 1 0 0 1 1
hexa D 3
Décimal 211
19.04.18 Julien DeAntoni 104
Mise en oeuvre: Le code
●
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