Vous êtes sur la page 1sur 86

Système sur puce (SoC) et Technologies

d'interfaçage

Licence Computer Engineering


Parcours : Systèmes Embarqués & IoT Système sur puce (SoC) et Technologies d'interfaçage LCE 2 2022/2023
1

1
Pré-requis
Systèmes logiques & Architecture des Ordinateurs

Objectifs
- Connaître les principaux composants d'un système à microprocesseur.
- Interfacer des systèmes à microprocesseurs entre eux.
- Développer et implémenter des applications écrites en C ou en assembleur
sur des systèmes à microprocesseur

Système sur puce (SoC) et Technologies d'interfaçage 2

2
Plan du Module
• Introduction aux Systèmes Embarqués et Systèmes sur puce

• Architecture des Processeurs Embarqués : Les Processeurs ARM et Cortex

• Les Microcontrôleurs

• Interface avec le monde analogique/numérique

• Communication série

• Etude et conception de schéma d'interface de chaîne de commande

Système sur puce (SoC) et Technologies d'interfaçage 3

3
Système sur puce (SoC) et Technologies
d'interfaçage

Chapitre 0:
Rappel du C

Licence Computer Engineering


Parcours : Systèmes Embarqués & IoT Système sur puce (SoC) et Technologies d'interfaçage LCE 2 2020/2021
4

4
Plan

1- Les pointeurs
2- Les structures de données
3- Manipulation des bits
4- Préprocesseur

5
Qu’est ce qu’un pointeur

Un pointeur est une variable dont le contenu pointe vers une autre
variable.

Le contenu est une adresse d’une autre variable

Un pointeur peut recevoir des valeurs différentes au cours de l’exécution

Appelé aussi variable d’adresse.

6
L’opérateur d’adresse « & »
Un pointeur est une variable qui contient l'adresse
d'une autre variable.
L'opérateur unaire & donne l'adresse mémoire d'un
objet.
L'instruction :
„ p = &c;

„ affecte l'adresse de c à la variable p.


On dit que p pointe sur c.
L'opérateur unaire & s'applique uniquement sur des
objets en mémoire.

7
EXEMPLE
Šle format d'une adresse est %p
(hexadécimal) ou %d (décimal) dans printf

8
DECLARATION DES POINTEURS
Une variable de type pointeur se déclare à l'aide de l'objet
pointé précédé du symbole * (opérateur d'indirection).

char *pc; pc est un pointeur pointant sur un objet de type char


int *pi; pi est un pointeur pointant sur un objet de type int
float *pr; pr est un pointeur pointant sur un objet de type float

L'opérateur * désigne en fait le contenu de l'adresse.


char *pc;
*pc = 34 ;
printf("CONTENU DE LA CASE MEMOIRE: %c\n",*pc);
printf("VALEUR DE L'ADRESSE EN HEXADECIMAL: %p\n",pc);

9
ARITHMETIQUE DES POINTEURS

On peut déplacer un pointeur dans un plan


mémoire:
„ addition,
„ soustraction,
„ incrémentation,
„ décrémentation.

Ce n’est pas un déplacement de 1 octet!!

Le déplacement signifie aller à l’adresse suivante ou


précédente suivant la taille de la variable.

10

10
ARITHMETIQUE DES POINTEURS
C STANDARD
int *pi;
char *pc;
*pi = 0;
*pc = 0x0a;

pi 00
00
00
00
pi+1

pc 0a
pc+1

PLAN MEMOIRE 11

11
ARITHMETIQUE DES POINTEURS
C STANDARD
int *pi;
char *pc;
*pi = 0;
*pc = 0x0a;

pi 00
00
00
00
pi+1

pc 0a
pc+1

PLAN MEMOIRE
12

12
Pointeurs multiples
Plusieurs pointeurs peuvent être dirigés vers un
même emplacement mémoire.

13

13
EXERCICES_CHAP1

14

14
Exercice 1-1

Ecrire un programme C qui permet de créer dynamiquement deux réels,


de les initialiser et de les afficher sur écran

15

15
Exercice 1-2

Ecrire un programme C qui permet de créer dynamiquement un


tableau de 10 entiers, de le remplir et de déterminer la valeur maximale
qu'il contient

16

16
Exercice 1-3

Ecrire une fonction C Permute_val qui permet de


permuter deux variables entières passées par valeur.
Ecrire une fonction C Permute_adr qui permet de
permuter deux variables entières passées par
adresse.

Saisir dans le programme principal deux entiers, et


appeler les fonctions Permute_val et Permute_adr
pour permuter les données saisies. Afficher les
résultats des deux fonctions

17

17
Plan du chapitre 1

1- Les pointeurs
2- Les structures de données
3- Manipulation des bits
4- Préprocesseur

18

18
LES ENREGISTREMENTS:
STRUCT

19

19
Définition de (struct)
struct nom_enreg
{ type champs1;
type champs2;
type champs3;
};

Exemple
struct personne
{ char nom[30];
char prenom [20];
int age;
};

20
Instanciation de struct
struct nom_enreg vble1, vble2, …, vblen;

Exemple:
struct personne pers1, pers2;

Noter la recommandation du mot clé struct dans


l’instanciationÆ syntaxe un peu lourde
Un typedef allège l’écriture:
typedef struct personne s_pers
….
s_pers pers1, pers2;

21
Accès aux champs : avec l’opérateur (.)

struct nom_enreg vble1, vble2, …, vblen;


nom_enreg.champs

Exemple:
struct personne pers1, pers2;

pers1.prenom=“Salah”;
pers1.age = 20;
printf(“l’age de M.%s est:%d”, pers1.prenom,pers1.age);

22
Initialisation des (struct)
Ÿ Il est possible d’initialiser un enregistrement lors de sa
déclaration
struct nom_enreg {val1, val2, …, valn};
Exemple:
struct pers1 = {“salah”, “ali”, 15}

Ÿ L’initialisation peut être également par lecture ou bien


par affectation directe
Exemple:
pers1.prenom=“Salah”;
scanf(“%s”, &pers1.prenom);

23
Tableaux de structures (struct)
Chaque case du tableau contient un élément de type
structure
struct point
{
int absc;
int ord;
};
struct point courbe[50];
/*Accès à l’abscisse de la case de d’indice i*/
courbe[i].absc = 5;

Initialisation lors de la déclaration du tableau


struct point courbe[3]= {{5,2},{6,8},{9,3}};

24
Imbrication de structures
struct date
{ int jour;
int mois;
int an;
};
struct personne
{char nom[30];
char prenom [20];
date dat_nais;
};
……
/*saisie de la date d’une vble pers1 */
Scanf("%d%d%d", &pers1.dat_nais.jour, &pers1.dat_nais.mois,
&pers1.dat_nais.an);

25
Passage d’une structure en paramètre
d’une fonction

Passage par valeur


struct point
{ int absc;
int ord;
};

/* prototype de fonction*/
void fct(struct point y);

26
Exemple:
int main()
{ struct point p1;
p1.absc = 5; p1.ord = 3;
printf(“valeurs avant appel : %d %d”,
p1.absc, p1.ord);
fct (p1);
printf(“valeurs après appel : %d %d”,
p1.absc, p1.ord);
return 0;
}
void fct (struct point s)
{s.absc = 0; s.ord = 0;}

valeurs avant appel : 5 3 Pas de


valeurs avant appel : 5 3 modification

27
Passage par valeur: inconvénient

28

28
Passer une structure par adresse

29

29
Précautions de passages en paramètres

30

30
Exemple:
int main()
{ struct p1;
p1.absc = 5; p1.ord = 3;
printf(“valeurs avant appel : %d %d”,
p1.absc, p1.ord);
fct (&p1);
printf(“valeurs après appel : %d %d”,
p1.absc, p1.ord);
return 0;
}
void fct (struct point * s)
{s->absc = 0; s->ord = 0;}

valeurs avant appel : 5 3 ŠModification


valeurs avant appel : 0 0 effectuée

31
Résumé

Une variable de type structure peut être :


„ Variable locale à une fonction
„ Variable globale à un programme
„ Retour d’une fonction
„ Paramètre d’une fonction

32
LES ÉNUMÉRATIONS:
ENUM

33

33
Définition

Le type énuméré enum permet de déclarer des constantes entières


nommées
Ceci donne plus de lisibilité au programmes

34

34
Déclaration
Syntaxe:
„ enum tag {liste_enumeree} liste_variables;
Š tag: le nom de l’énumération
Š Liste_variables: liste des variables de type tag
Š Liste_enumeres: liste de noms énumérées représentant
des constantes entières.
Exemple:
• enum automobile {4chv, 5chv, 6chv};
„ Il es possible de définir des variables de type enum ainsi:
• enum automobile japonaise, américaine;
• Équivaut aussi à:
• enum automobile {4chv, 5chv, 6chv} japonaise, américaine;

35

35
Affecter des valeurs aux noms énumérés
Les éléments des listes énumérées sont incrémentés de 0
à n. Exemple:
o enum automobile {4chv, 5chv, 6chv} japonaise, américaine;
o 4chv = 0, 5chv= 1 et 6chv=1
Il est possible d’affecter d’autres valeurs entières:
o enum automobile {4chv=60, 5chv=30, 6chv=10};
o Æ 4chv représente le nombre 60
o Æ 5chv représente le nombre 30
o Æ 6chv représente le nombre 10
o enum automobile {4chv=60, 5chv=30, 6chv};
o Æ 4chv représente le nombre 60
o Æ 5chv représente le nombre 30
o Æ 6chv représente le nombre 31 31= 30 + 1

36

36
Exemple

37

37
Exemple: conversion minusculeÆ majuscule

38

38
Exemple: conversion minusculeÆ majuscule

39

39
Exemple: conversion minusculeÆ majuscule

POETE 1
POETE 2
POETE 3

40

40
TYPEDEF

41

41
TYPEDEF

42

42
TYPEDEF

43

43
EXERCICES_CHAP1

44

44
Exercice 2-1

Ecrire un programme en C qui déclare le type computer défini par un


coût, année, vitesse CPU, type CPU.
Le programme fait appel à deux fonctions permettant de faire
respectivement la saisie et l’affichage des caractéristiques d’un nombre
d’ordinateurs déterminé par l’utilisateur.

45

45
Exercice 3-1
Ecrire un programme qui permet à un utilisateur de
fournir des informations personnelles (nom, âge) ainsi
que des informations sur son téléopérateur (une société
de diffusion par câble ou bien une société de diffusion
par satellite), le nom de la société et le nombre d’heures
consacrées à la télé (par semaine).

Exercice 3-2
Modifiez le programme en ajoutant un champ binaire
concernant le type de connexion

46

46
Plan du chapitre 1

1- Les pointeurs
2- Les structures de données
3- Manipulation des bits
4- Préprocesseur

47

47
Opérateurs bits à bits

48

48
Opérateur &

49

49
Opérateur |

50

50
Opérateur ^

51

51
Opérateur XOR logique?
ŠExercice: une fonction permettant de réaliser
un XOR logique (a^^b) ?

52

52
Opérateur unaire ~

53

53
Décalage à gauche

54

54
Décalage à gauche

55

55
Décalage à droite

56

56
Exercice: Décalage circulaire à gauche ?

57

57
Exercice: Décalage circulaire à droite ?

58

58
Décalage d’un bit seul

59

59
Tester le nième bit

60

60
Mettre à 1 le nième bit

61

61
Mettre à 0 le nième bit

62

62
Exercice: Affecter le nième bit ?

63

63
Drapeaux

64

64
Masque
Šstocker plusieurs informations sur un entier

Š1023=10 bits à 1

constantes non signées

65

65
Portabilité des types

66

66
Plan du chapitre 1

1- Les pointeurs
2- Les structures de données
3- Manipulation des bits
4- Préprocesseur

67

67
Le préprocesseur

68

68
Inclusion des fichiers

69

69
Inclusion des fichiers

70

70
Définition des macros

71

71
Définition des macros

72

72
Définition des macros

73

73
Définition des macros

74

74
Définition des macros

75

75
Définition des macros

76

76
#undef

77

77
#expr

78

78
Inclusion conditionnelle

79

79
Inclusion conditionnelle

80

80
Variables de préprocesseur

81

81
#warning et #error

82

82
Assertions

83

83
Assertions

84

84
const

85

85
const

86

86

Vous aimerez peut-être aussi