Vous êtes sur la page 1sur 92

Systèmes embarqués

Introduction à la programmation
micro-contrôleur
avec un OS temps réel

Julien Deantoni

Merci à Jean-Philippe Babau et Gabriel Frey pour


m'avoir permi la réutilisation d'une partie de leurs supports

V0.3 – 2018
Pourquoi ce cours ?

Thales Alenia Space: stratobus and satellites



Différents types ee systèmes embarrqués Renault Autonomous Car


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

Introduction aux Systèmes et Logiciels Embarqués 5


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 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

Introduction aux Systèmes et Logiciels Embarqués 8


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 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

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éances
déterminées

Introduction aux Systèmes et Logiciels Embarqués 11


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 12


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 13


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 14


Le développement de systèmes temps réel
version simple :-)

Introduction aux Systèmes et Logiciels Embarqués 17


Le développement de systèmes temps réel
version simple :-)


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

Introduction aux Systèmes et Logiciels Embarqués 26


Micro-contrôleur ?

Introduction aux Systèmes et Logiciels Embarqués 27


AT90S8535
Micro-contrôleur ?

Processeur

Mémoire

Périphériques

Bus ee communicartion

Entrées / Sorties

→Dans le même boitier


AT90S8535

Introduction aux Systèmes et Logiciels Embarqués 28


Micro-contrôleur sans OS : comment ?


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

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 30


Micro-contrôleur sans OS : comment ?

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...)
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

19.04.18 Julien DeAntoni 32


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

19.04.18 Julien DeAntoni 33


Micro-contrôleur sans OS : les registres

Les registres de configuration
– Souvent nombreux
– 8 / 16 / 32 bits
– À une adresse mémoire particulière
– À considérer bit par bit

Datasheets PIC16F84A

19.04.18 Julien DeAntoni 34


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

Finite State Machine, State Charts 35


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 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

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 37


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
http://embedded-computing.com/pdfs/QNX.Jan05.pdf 1 : Ou Déterminisme...

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 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...

Introduction aux Systèmes et Logiciels Embarqués 39


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 40


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 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

Larisse à l'arpplicartion certarins
arccès aru martériel

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 FAILURE
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 FAILURE
parr l'arpplicartion

Larisse à l'arpplicartion certarins FAILURE
arccès aru martériel

Introduction aux Systèmes et Logiciels Embarqués 44


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 45


Différents RTOS safety-critical


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é

→ Évite la propagation des pannes

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
FAILURE
RTOS par l'application OK


S'assure que le
partitionnement est
respecté OK

→ Évite la propagation des pannes

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
FAILURE
RTOS par l'application OK


S'assure que le
partitionnement est
respecté OK

→ Évite la propagation des pannes

Introduction aux Systèmes et Logiciels Embarqués 48


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 49


Les objets du temps réel
les 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 50


Les objets du temps réel
la tâche

Une tâche est un fil d'exécution

Une tâche est représentée par une structure1
1 : Souvent appelée TaskControlBlock
contenant :

Un identifiant

Une référence vers son typedef
{code
struct

void *r_stack; // Start of stack (top address-1)



Une priorité void (*start) (void);
pProcessID pid;
// Entry point of code
// Pointer to Process ID block
unsigned char priority; // Priority of task (0-255)

Un état : } FLASH const TaskControlBlock;


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

Introduction aux Systèmes et Logiciels Embarqués 52


Les objets du temps réel
Exemple de primitives la tâche

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);

Introduction aux Systèmes et Logiciels Embarqués 53


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 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

ou e'un événement Suspend()



suspeneue Événement API: Block
Suspend() Resume() sémaphore sémaphore

en mémoire maris ne serar timer expire,etc timer, etc
Exit() Exit()
pars oreonnarncée Terminate() Terminate()

en-cours Susp-
Susp- Suspend()
bloquée
bloquée

Choisie parr l'oreonnarnceur endue
endue
pour s'exécuter
Exit() Exit()

Morte Terminate() Terminate()


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

Introduction aux Systèmes et Logiciels Embarqués 60


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
PORTD=++valueD; // Modify PORTD
AvrXWaitTimer(&timer1);
}
} Exemple AvrX

Introduction aux Systèmes et Logiciels Embarqués 61


Les objets du temps réel
routine 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 62


Les objets du temps réel
le 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 63


Les objets du temps réel
le 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 64


Les objets du temps réel
le 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()
Lacatre: langage d'aide à la conception d'application temps réel

Rôle www.lisyc.univ-brest.fr/pages_perso/babau/cours/multitache.pdf

synchronisation entre tâches

exclusion mutuelle

Interruption logicielle

Introduction aux Systèmes et Logiciels Embarqués 65


Les objets du temps réel
le 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 66


Les objets du temps réel
le 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éel
le 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 68


Les objets du temps réel
le 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éel
le 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 70


Les objets du temps réel
le 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 71


Les objets du temps réel
le 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 72


Les objets du temps réel
le 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éel
le 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

Accès par fle d’attente

FIFO
Introduction aux Systèmes et Logiciels Embarqués 74

PRIORITY
Les objets du temps réel
le sémaphore

Primitives clarssiques

Créartion

Initiarlisartion

Destruction

imparct sur l ’arpplicartion

Dépôt (incrémentartion)

nombre e’unité
void AvrXSetSemaphore(pMutex); //blocking

Retrarit (eécrémentartion) void AvrXIntSetSemaphore(pMutex); //non blocking
void AvrXWaitSemaphore(pMutex);

nombre e’unité Mutex AvrXTestSemaphore(pMutex); //blocking
Mutex AvrXIntTestSemaphore(pMutex); //non blocking

temps e’arttente void AvrXResetSemaphore(pMutex);
void AvrXResetObjectSemaphore(pMutex);

Infni Exemple d'AvrX

Introduction aux Systèmes et Logiciels Embarqués 75



fni
Les objets du temps réel
le sémaphore
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 attente
status = semTake(semId, temps | WAIT_FOREVER | NO_WAIT) ;


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 »

Introduction aux Systèmes et Logiciels Embarqués 76


Les objets du temps réel
l'ordonnanceur

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)

Introduction aux Systèmes et Logiciels Embarqués 77


Les objets du temps réel
l'ordonnanceur

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()


On en parle
Blocarge ee l’oreonnarnceur

Parssarge enlamoee
semaine prochaine
non préemptif

Exécution ee primitives système

Primitives spécifques

Introduction aux Systèmes et Logiciels Embarqués 78


Les objets du temps réel
timer logiciel (1)

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)

Introduction aux Systèmes et Logiciels Embarqués 79


Les objets du temps réel
objets haut-niveau


É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

Introduction aux Systèmes et Logiciels Embarqués 80


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 81


Implémentation d'un RTOS
gestion du temps

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

Introduction aux Systèmes et Logiciels Embarqués 82


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 87


Programmation avec un RTOS
les 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 90


Programmation avec un RTOS
les tâches (2)
Principe :

Introduction aux Systèmes et Logiciels Embarqués 91


Programmation avec un RTOS
les ressources

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

Introduction aux Systèmes et Logiciels Embarqués 92


Programmation avec un RTOS
les 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 93


Choix d’un RTOS
critères

Normes ●
Coûts

SCEPTRE (1982) ●
Environnement ee eéveloppement

POSIX (Unix) ●
(Tornareo 15 000 € sarns fonctionnarlités)

OSEK/VDX (Automobile)

Royarlties (royarlty free)

Développement supplémentarires

Profl MARTE ee l’OMG ?

Drivers, protocole

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
Introduction aux Systèmes et Logiciels Embarqués 97
Choix d’un RTOS
critères

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
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

Introduction aux Systèmes et Logiciels Embarqués 98


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 99


Conclusion
micro-contrôleur avec un RTOS

Des concepts génériques...

Tâches, sémarphores, etc

… maris mises en œuvre spécifques
 Bien lire les spécifications

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

 Maitrise du HW, prédiction a priori



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
 Phase à ne pas négliger
Introduction aux Systèmes et Logiciels Embarqués 101
Mise en oeuvre: La chaîne de compilation

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

19.04.18 Julien DeAntoni 102


Mise en oeuvre: La chaîne de compilation

Définition des handlers différentes selon le compilateurs /
linkers
– AVR-gcc
//handler de l'interruption nommées INT_COMPA
ISR(INT_COMPA_vect)
{
// traiter l'interruption
}

– 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

19.04.18 Julien DeAntoni 105