formation langage c embarqués_partie ii_a.drissi el-bouzaidi [les fonctions]

30
Partie 2 : Langage C Embarqué Partie 2 : Langage C Embarqué Master Micro Electronique 2ME Systèmes Embarqués ANOUAR DRISSI EL-BOUZAIDI

Upload: rdone-oene

Post on 09-Aug-2015

86 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

Partie 2 : Langage C EmbarquéPartie 2 : Langage C Embarqué

MasterMicro Electronique 2ME

Systèmes Embarqués

� ANOUAR DRISSI EL-BOUZAIDI

Page 2: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 3: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [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.

Page 4: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 5: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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)

Page 6: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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;

}

Page 7: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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;

}

Page 8: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 9: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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;

}

Page 10: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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)

{

…..

…..

…..

}

Page 11: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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.

Page 12: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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)

Page 13: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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;

}

Page 14: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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.

Page 15: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 16: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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, …)

Page 17: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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;

}

Page 18: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 19: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 20: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

} }

Page 21: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

}

}

Page 22: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 23: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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é

Page 24: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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 :

Page 25: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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;

Page 26: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 27: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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.

Page 28: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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.

Page 29: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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

Page 30: Formation Langage C Embarqués_Partie II_A.DRISSI EL-BOUZAIDI [Les fonctions]

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