Académique Documents
Professionnel Documents
Culture Documents
systmes embarqus
Sylvain MONTAGNY
sylvain.montagny@univ-savoie.fr
Btiment chablais, bureau 13
04 79 75 86 86
Retrouver tous les documents de Cours/TP sur le site
www.master-electronique.com
Universit de Savoie
Prsentation TP et examen
TP : 20 h en 5 sances
Le but de ce projet est d'crire un programme de compression de
fichiers textes, sans perte d'information. On demande galement
d'crire un dcompresseur qui devra restaurer le fichier original.
Lalgorithme propos ici est l'algorithme de Huffman.
Une note :
Universit de Savoie
Universit de Savoie
Universit de Savoie
Universit de Savoie
Universit de Savoie
Universit de Savoie
Universit de Savoie
10
Lisibilit du code,
les types de variables,
les typedef,
occupation mmoire,
port des variables,
les oprateurs,
manipulation de registre,
les structures,
les pointeurs,
le main(),
pointeurs,
la pile,
type de fonction,
allocation dynamique,
les options doptimisations la compilation,
les erreurs classiques du C
11
Exercice :
Raliser un code qui imprime les N premiers lments d'un
tableau dentier A[ ] en insrant un espace entre les lments et
en commenant une nouvelle ligne aprs chaque dixime chiffre.
void main(void){
int A[80],N,i;
scanf("%d",&N);
for (i=0; i<N; i=i+1){
printf("%d", A[i]);
if ((i%10) == 9)
printf("\n");
else
printf(" ");
}
}
//Saisie de N
//Boucle N fois
//Affichage contenu tableau
//Test du 10me chiffre
12
Rgles respecter :
Universit de Savoie
13
Universit de Savoie
14
Exemple
nombre += 5;
Equivalence
nombre=nombre+5
nombre -= 6;
nombre *= 3;
nombre /= 2;
nombre %= 4;
nombre = nombre % 4
nombre++;
nombre = nombre + 1;
-- Dcrmentation nombre--;
nombre = nombre - 1;
y = x++
y = ++x
y
x
x
y
=
=
=
=
Universit de Savoie
x
x + 1
x + 1
x
15
Universit de Savoie
17
Universit de Savoie
18
Universit de Savoie
19
char a=64;
unsigned char b=64;
char c=128;
unsigned char d=128;
printf("%d",a);
printf("%d",c);
printf("%u",a);
printf("%u",c+a);
20
Conversion explicite :
La conversion de type consiste transformer un type de valeur en un
autre, en respectant la syntaxe suivante
(<type>) <expression>
Conversion implicite :
Lorsque les deux oprandes sont de type diffrent, le compilateur
prvoit une conversion implicite suivant l'ordre :
{ char -> int -> long -> float -> double } et { signed ->
unsigned }
Universit de Savoie
21
Universit de Savoie
23
Classes de stockage
Qualificateurs
Universit de Savoie
24
void f(void) {
int j = 0;
printf("j vaut %d",j);
}
void main(void) {
f();
}
. . .
25
Note : La classe static sur une variable globale ou une fonction aura
pour objectif de privatiser lobjet au fichier o elle est dclare. Cest-dire quelle ne pourra pas tre utilise depuis un autre fichier.
/* File : ext.c */
void next(void);
void next1(void);
int a1=1; /* definition of external (non static)*/
void main(void){
a1=2;
printf("a1=%d\n",a1);
next();
next1();
printf("a1=%d\n,a1);
}
27
/* File file2.c */
int b1=0;
void next(void){
char a1;
a1='a';
b1=77;
}
void next1(void){
float b1;
b1=19.2;
a1=13;
}
28
Universit de Savoie
29
30
31
Universit de Savoie
32
On prfrera :
int a;
a = une_fonction();
if (a != 0) { /* ... */ }
Attention :
int a = 0; b = 2;
if (a = b) { /* Le code qui suit sera toujours excut ... */ }
Universit de Savoie
33
Universit de Savoie
34
35
Universit de Savoie
36
37
38
Le main()
Universit de Savoie
39
Universit de Savoie
40
// Tableau 1 dimension
// Tableau 2 dimensions
void main(void){
void main(void){
int tableau[4];
int i;
for(i=0;i<4;i++){
tableau[i]=0;
int tableau[4][3];
int i,j;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
tableau[i][j]=0;
}
}
}
}
Universit de Savoie
41
tableau[0][0]
tableau[0][1]
tableau[0][2]
tableau[1][0]
tableau[1][1]
tableau[1][2]
tableau[2][0]
tableau[2][1]
tableau[2][2]
tableau[3][0]
tableau[3][1]
tableau[3][2]
Universit de Savoie
42
Universit de Savoie
43
stack
SP (Stack Pointer)
address space
heap
(dynamically allocated)
data segment
Data : (static and global)
0x00000000
code segment
(=program)
Universit de Savoie
PC (Program Counter)
44
Data segment :
Data : contient toutes les variables static et globales
(initialises ou non)
Heap : Le tas est gr dynamiquement. Cest une zone de donne qui
grossi la rservation de zone mmoire (malloc) et qui se rduit lors
de la libration (free).
Stack : Cest une zone de stockage de type LIFO. Elle contient les
adresses de retour des fonctions et les variables locales.
Universit de Savoie
45
char c;
void main (void){
*(unsigned char *)0x80 = 0xAA;
c= *(unsigned char *)0x80;
46
Universit de Savoie
48
49