formation langage c embarqués_partie ii_a.drissi el-bouzaidi [les fonctions]
TRANSCRIPT
Partie 2 : Langage C EmbarquéPartie 2 : Langage C Embarqué
MasterMicro Electronique 2ME
Systèmes Embarqués
� ANOUAR DRISSI EL-BOUZAIDI
Partie II : Le Langage C Embarqué
��������1. Introduction
Les fonctions en C Embarqué
3Pr. A. DRISSI EL-BOUZAIDI Page 2
��������
Formation Langage C Embarqué - Partie 2
1. Introduction
2. Fonction en C
3. Flux des données entre
les fonctions
Les fonctions en C Embarqué
Définition d’une fonction :
Une fonction en langage C représente une entité de données et d'instructions qui
fournit une solution à une partie bien définie d'un problème plus complexe. Une
1. Introduction :1. Introduction : (1/5)
3Pr. A. DRISSI EL-BOUZAIDI Page 3Formation Langage C Embarqué - Partie 2
fonction peut faire appel à d'autres fonctions, leur transmettre – éventuellement –
des données et en recevoir en retour.
Les fonctions en C Embarqué
Lisibilité
Diminution du risque d'erreurs
1. Introduction :1. Introduction :
Avantages de l’utilisation des fonctions :
(2/5)
3Pr. A. DRISSI EL-BOUZAIDI Page 4Formation Langage C Embarqué - Partie 2
Modularité Possibilité des tests sélectifs
Travail en équipe
Possibilité de la Réutilisation
Les fonctions en C Embarqué
Multiplication (F_Mul)
1. Introduction :1. Introduction :
Exemple de la notion modularité :
(3/5)
3Pr. A. DRISSI EL-BOUZAIDI Page 5Formation Langage C Embarqué - Partie 2
Somme (F_Som)
Division (F_Div)
La somme de n premiers entiers
n(n+1)/2
(F_Somme_N_Entiers)
Les fonctions en C Embarqué
int F_Mul(int A,int B)int F_Div(int A,int B){
int C = 0;int F_Som(int A,int B)
Somme:
1. Introduction :1. Introduction : (4/5)
Exemple de la notion modularité :
Multiplication: Division:
3Pr. A. DRISSI EL-BOUZAIDI Page 6Formation Langage C Embarqué - Partie 2
int F_Mul(int A,int B)
{
int C = 0;
C = A*B;
return C;
}
int C = 0;
if (0 != B)
{ C = A/B; }
else
{ /* No action */ }
return C;
}
int F_Som(int A,int B)
{
int C = 0;
C = A+B;
return C;
}
Les fonctions en C Embarqué
int F_Somme_N_Entiers (int n)
{
Fonction globale calculant la somme de n premiers entiers :
1. Introduction :1. Introduction : (5/5)
Exemple de la notion modularité :
3Pr. A. DRISSI EL-BOUZAIDI Page 7Formation Langage C Embarqué - Partie 2
{
int Resultat = 0;
Resultat = F_Som(n, 1); /* Resultat = n+1 */
Resultat = F_Mul(Resultat, n); /* Resultat = n(n+1) */
Resultat = F_Div(Resultat, 1); /* Resultat = n(n+1)/2 */
reutrn Resultat;
}
2-1. Prototype d’une fonction
2-2. Fonction main
2- Fonctions en langage C
Les fonctions en C Embarqué
3Pr. A. DRISSI EL-BOUZAIDI Page 8Formation Langage C Embarqué - Partie 2
2-3. Passage des paramètres
2-4. Récursivité
2-5. Pointeur sur les fonctions
2-6. Etapes de l’appel d’une fonction
Les fonctions en C Embarqué
22--1. Prototype d’une fonction :1. Prototype d’une fonction : (1/2)
Prototype d'une fonction est une instruction décrivant le type de retour, le nom et les
paramètres de cette fonction.
Sous forme : Type_Retour Nom_Fonction (Type1 Par1, type2 Par2, …)
Le prototype d’une fonction est utilisé dans la déclaration et la définition.
3Pr. A. DRISSI EL-BOUZAIDI Page 9Formation Langage C Embarqué - Partie 2
Type_Retour Nom_Fonction (Type1 Par1, Type2 Par2, …) ;
La definiton d’une fonction consiste à ajouter au prototype le bloc des instructions entre
deux accolades, la première ouvrante et la deuxiéme fermante.
Exemple : int F_Somme (int a, int b)
{
return a+b;
}
Les fonctions en C Embarqué
22--1. Prototype d’une fonction :1. Prototype d’une fonction : (2/2)
L’appel d’une fonction se fait en précisant son nom et les variables de la fonction
appelante passées en paramètres (Le passage des paramètres et la récupération
du retour doivent être cohérant avec le prototype de la fonction).
void F_ Appelante()
{ int F_ Appelée(int a, int b)
3Pr. A. DRISSI EL-BOUZAIDI Page 10Formation Langage C Embarqué - Partie 2
{
int a = 0;
int x = 5;
int y = 6;
a = F_Appelée(x , y);
}
int F_ Appelée(int a, int b)
{
…..
…..
…..
}
Les fonctions en C Embarqué
22--2. Fonction main :2. Fonction main : (1/2)
La fonction main est la fonction principale des programmes C :
� Obligatoire : La fonction main marque le début du programme.
� Unique : Le programme en langage C ne dispose jamais de deux points d’entrée.
Prototype :
3Pr. A. DRISSI EL-BOUZAIDI Page 11Formation Langage C Embarqué - Partie 2
Prototype :
Le prototype général de la fonction main est donnée par :
int main (int argc, char *argv[])
• Le prototype main doit renvoyer un code d'erreur de l'exécution de type int (0 si
le programme s'est déroulé correctement).
• La fonction main interagir avec le système d’exploitation qui lui passe des paramètres.
Les fonctions en C Embarqué
22--2. Fonction main :2. Fonction main : (2/2)
Prototype :
La fonction main prend deux paramètres argc et argv[] permettant d'accéder aux
paramètres passés au programme lors de son appel.
Le parametre argc : indique le nombre des paramètres qui ont été passés au programme.
3Pr. A. DRISSI EL-BOUZAIDI Page 12Formation Langage C Embarqué - Partie 2
Le parametre argv[] : un tableau des chaines de caractères regroupant les paramètres
passés (argv[0] stocke le nom du programme, argv[1] contient le premier parametre, …).
En général les programmes développés pour les systèmes C emb arqué
n’interagissent pas avec les noyaux du hard.
void main (void)
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (1/7)
Visibilité des variables :
� Variable locale à une fonction: Il s'agit de toute variable définie dans le bloc de la fonction.
� Variable globale à une fonction: Il s'agit de toute variable définie à l‘extérieur de la fonction.
Variables locales Variables globales
3Pr. A. DRISSI EL-BOUZAIDI Page 13Formation Langage C Embarqué - Partie 2
void F_VarL()
{
int a;
int x;
int y;
}
int a;
int x;
int y;
void F_VarG()
{
a = x+y;
}
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (2/7)
Passage des constantes :
1. Les valeurs val1, val2, … sont empilées
en respectant les types des paramètres de
la fonction appelée.
3Pr. A. DRISSI EL-BOUZAIDI Page 14Formation Langage C Embarqué - Partie 2
Etapes de Passage des
Constantes
Fonc (val1, val2, …)
3. Les cases mémoires de
la pile réservées pour
L’empilement sont
effacées après l’exécution
de cette fonction.
2. Les paramètres de
cette fonction
deviennent des copies
des valeurs empilées.
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (3/7)
constantes
Passage
des constantes
……
…11b
1 2
…4
1 SP
int F_Somme (int a, int b);
int Fonction_Applante()
{
int C = 0;
C = F_Somme (10, 11);
return C;
}
3Pr. A. DRISSI EL-BOUZAIDI Page 15Formation Langage C Embarqué - Partie 2
…
……
11
100
……
…0
SP
b
a
SP
SP
3
……
…21
C
4
C
C
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (3/7)
Passage des variables :
1. Les valeurs des variables x, y, … sont
copiées dans la pile d’exécution en
respectant les types des paramètres de
la fonction appelée.
3Pr. A. DRISSI EL-BOUZAIDI Page 16Formation Langage C Embarqué - Partie 2
la fonction appelée.
3. Les cases mémoires de
la pile réservées pour
L’empilement sont
effacées après l’exécution
de cette fonction.
2. Les paramètres de
cette fonction
deviennent des copies
des valeurs empilées.
Etapes de Passage des
Constantes
Fonc (x, y, …)
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (4/7)
Passage des adresses :
Il est possible de mettre à jour les variables d’une fonction à l’intérieur d’un module appelé
en lui passant les adresses de ces variables.
void F_Somme(int a, int b, int * C) void Fonction_Applante()
Exemple:
3Pr. A. DRISSI EL-BOUZAIDI Page 17Formation Langage C Embarqué - Partie 2
void F_Somme(int a, int b, int * C) void Fonction_Applante()
{ {
int x = 9;
*C = a+b; int y = 10;
int z = 0;
return;
} F_Somme(x, y, &z);
return;
}
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (5/7)
…
…&z
910
SP
11
22
Passage des adresses :
3Pr. A. DRISSI EL-BOUZAIDI Page 18Formation Langage C Embarqué - Partie 2
……
……
99
010
9…
SP
zyx
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (6/7)
…&z
10
SP
b
C
33
…
9SP
44
Passage des adresses :
3Pr. A. DRISSI EL-BOUZAIDI Page 19Formation Langage C Embarqué - Partie 2
109
910
19…
xyz
ab 9
10
19…
xyz
Les fonctions en C Embarqué
22--3. Passage des paramètres :3. Passage des paramètres : (7/7)
Passage des tableaux :
Passage d'un tableau se fait par l'adresse de son premier élément.
Void F_ Appelée (int * Tableau);
Exemple:
3Pr. A. DRISSI EL-BOUZAIDI Page 20Formation Langage C Embarqué - Partie 2
Void F_ Appelée (int * Tableau);
void F_ Appelante () void F_ Appelante ()
{ {
int Tab[5] = {0, 2, 4, 6, 8}; int Tab[5] = {0, 2, 4, 6, 8};
void F_ Appelée (Tab) void F_ Appelée (&Tab[0])
} }
Les fonctions en C Embarqué
22--4. Récursivité :4. Récursivité : (1/3)
Un algorithme récursif est un algorithme dont la définition fait référence à lui-même.
Exemple:
void F_Fact(int n)
{
if(n==0)
3Pr. A. DRISSI EL-BOUZAIDI Page 21Formation Langage C Embarqué - Partie 2
{
return 1;
}
else
{
return n * F_Fact(n-1) ;
}
}
Les fonctions en C Embarqué
22--4. Récursivité :4. Récursivité : (2/3)
Exemple: (n = 3)
/* n = 3 */void F_Fact(int n) {if(n == 0) { return 1; }
/* n = 2 */void F_Fact(int n) {if(n == 0) { return 1; }
1*1*21*1*2*3
3Pr. A. DRISSI EL-BOUZAIDI Page 22Formation Langage C Embarqué - Partie 2
if(n == 0) { return 1; } else { return n * F_Fact( n-1) ; }
}
/* n = 0 */void F_Fact(int n) {if(n == 0) { return 1; } else { return n * F_Fact( n-1) ; }
}
/* n = 1 */void F_Fact(int n) {if(n == 0) { return 1; } else { return n * F_Fact(n-1) ; }
}
if(n == 0) { return 1; } else { return n * F_Fact( n-1) ; }
}
1*1
1
Les fonctions en C Embarqué
22--4. Récursivité :4. Récursivité : (3/3)
Limites de la
récursivité Dépassement de la pile
(Stack Overflow)
3Pr. A. DRISSI EL-BOUZAIDI Page 23Formation Langage C Embarqué - Partie 2
Temps d'exécution
Complexité
Les fonctions en C Embarqué
22--5. Pointeur sur les fonctions :5. Pointeur sur les fonctions : (1/3)
En langage C, le nom d’une fonction est considéré comme une adresse de manière
identique au nom d’un tableau.
Le pointeur sur une fonction pointe sur sa première instruction et il est du type défini par le
type de retour et les paramètres de cette fonction.
3Pr. A. DRISSI EL-BOUZAIDI Page 24Formation Langage C Embarqué - Partie 2
Définition de la fonction F_Somme:
int F_Somme (int i, int j)
{
int k;
k = i+j;
return k:
}
Exemple :
Les fonctions en C Embarqué
22--5. Pointeur sur les fonctions :5. Pointeur sur les fonctions : (2/3)
Définition d'un type des pointeurs sur une fonction de type d e retour int et qui dispose deux
paramètres de type int :
typedef int (*Function) (int, int);
Déclaration d'un pointeur de ce type :
3Pr. A. DRISSI EL-BOUZAIDI Page 25Formation Langage C Embarqué - Partie 2
Utilisation du pointeur sur la fonction Function :
int F_Appelante (int a, int b)
{
int C;
Pf = F_Somme;
C = (*pf) (a, b);
}
Function pf;
Les fonctions en C Embarqué
22--5. Pointeur sur les fonctions :5. Pointeur sur les fonctions : (3/3)
Mise en pile des paramètres1
Saut à la fonction appelée
Prologue dans la fonction appelée
2
3
1 La fonction appelante
empile les copies
des paramètres.
3Pr. A. DRISSI EL-BOUZAIDI Page 26Formation Langage C Embarqué - Partie 2
Exécution de la fonction appelée
Épilogue dans la fonction appelée
Prologue dans la fonction appelée 3
4
5
Récupération du résultat et effacement des paramètres6
…
Les fonctions en C Embarqué
22--6. Etapes de l’appel d’une fonction :6. Etapes de l’appel d’une fonction : (1/2)
1
2
3
1
2
3
Mise en pile des paramètres
Saut à la fonction appelée
Prologue dans la fonction appeléeLa fonction appelée
prépare son
La fonction appelante provoque
un saut à l’adresse de début
de la fonction appelée.
3Pr. A. DRISSI EL-BOUZAIDI Page 27Formation Langage C Embarqué - Partie 2
4
5
6
4Exécution de la fonction appelée
Épilogue dans la fonction appelée
Prologue dans la fonction appelée
Récupération du résultat et effacement des paramètres
…
prépare son
environnement.
la fonction appelée
s’exécute jusqu’à
rencontrer un return.
Les fonctions en C Embarqué
22--6. Etapes de l’appel d’une fonction :6. Etapes de l’appel d’une fonction : (2/2)
1
2
1
2
33
Mise en pile des paramètres
Saut à la fonction appelée
Prologue dans la fonction appelée
l’épilogue fait le travail
inverse du prologue,
il restitue le contexte de
3Pr. A. DRISSI EL-BOUZAIDI Page 28Formation Langage C Embarqué - Partie 2
4
56
4
56
33
Exécution de la fonction appelée
Épilogue dans la fonction appelée
Prologue dans la fonction appelée
Récupération du résultat et effacement des paramètres
…
il restitue le contexte de
la fonction appelante.
la fonction appelante dépile les paramètresqu’elle avait empiléset continue son exécutionavec les valeurs envoyéespar la fonction appelée.
Les fonctions en C Embarqué
Fonction 1
Fonction 2
Fonction 5
3Pr. A. DRISSI EL-BOUZAIDI Page 29Formation Langage C Embarqué - Partie 2
Fonction 10
Fonction 8
Fonction 3
Fonction 4
Fonction 7
Fonction 9Fonction 6
Les fonctions en C Embarqué
µC
La tache « M2 » de priorité 5
écrase la valeur de la donnée
3Pr. A. DRISSI EL-BOUZAIDI Page 30Formation Langage C Embarqué - Partie 2
M1 M1M2
Le module « M1 »
de priorité 1 mis à jour
la donnée « Data_C ». t
écrase la valeur de la donnée
« Data_C ».
La tache « M1 » continue
son exécution avec la nouvelle
valeur de la donnée « Data_C ».