|
|
|
|
| Conception d'un logiciel structuré |
 |
Découpage d’une application en plusieurs fonctions |
 |
Séparation en fichiers distincts |
 |
Intérêt des fichiers header et des librairies |
 |
Classes d’allocation des variables (static, automatic, register et extern) et analyse de leurs durées de vie |
| Analyse des éléments constitutifs d'une chaîne de compilation |
 |
Explication des étapes du processus de génération de code en natif et en croisé |
 |
Rôle du compilateur, de l’assembleur et du linker |
 |
Paramétrage en fonction d’un mapping mémoire |
 |
Structure d’un programme source C, distinction des parties essentielles : préprocesseur, déclaration des variables globales, fonctions |
 |
Découpage d’une application en fichiers distincts |
 |
Le préprocesseur |
 |
Les instructions #define et #include |
 |
Ecriture de macros |
 |
Précautions à prendre dans les headers pour éviter les redéclarations de variables |
 |
Notion de projet, réalisation de librairies |
| Exercice : |
mise en œuvre de la chaîne de compilation et fabrication d’une librairie |
| Les types du langage C et les opérateurs |
 |
Les types scalaires : char, int, float et double |
 |
Codage des nombres entiers en code binaire naturel ou en code complément à 2 |
 |
Déclaration des variables |
 |
Les conversions de type implicites et explicites (casting) |
 |
Les directives de compilation pour forcer l’alignement du code et des données, intérêt sur les processeurs munis de caches |
 |
L'attribut volatile pour éviter les optimisations de code par le compilateur |
 |
Les constantes |
 |
Les opérateurs du C : logiques, arithmétiques et relationnels |
 |
Priorité entre opérateurs |
| Exercice : |
réalisation de programmes d’accès aux I/O du ColdFire mettant en œuvre les concepts ci-dessus |
| Les traitements itératifs et conditionnels |
 |
La structure if…else |
 |
La structure switch…case |
 |
Les boucles : while, do…while et for |
 |
Les instructions break et continue |
 |
L'instruction goto |
 |
Les optimisations du compilateur au niveau des structures de contrôle du langage C : exemple le dépliement des boucles |
| Exercice : |
réalisation d’un chenillard |
| Les pointeurs et les tableaux |
 |
Analyse d’une instruction de transfert assembleur pour comprendre l’accès à la mémoire |
 |
Mise en évidence de la distinction adresse / contenu |
 |
Calculs d’adresses, opérations mêlant pointeurs et adresses absolues |
 |
Les tableaux mono et multi multi-dimensionnels |
 |
Les tableaux de pointeurs |
 |
Les pointeurs sur fonctions |
| Exercice : |
allocation d’un pointeur sur un port d’IO |
| Exercice : |
visualisation en mémoire des allocations qui sont réalisées dans le cas de tableaux multi-dimensionnels |
| Exercice : |
recopie de tableaux et notation par pointeur |
| Les structures et les unions |
 |
Accès aux champs d’une structure |
 |
Déclaration de variables et de pointeurs sur type structuré |
 |
Explication du padding imposé par les règles d’alignement : options pack du compilateur |
 |
Les formats big et little endian |
 |
Les structures à champ de bits : modélisation des périphériques |
 |
Utilisation de typedef |
 |
Intérêt du sizeof |
 |
Les tableaux de structures |
 |
Les listes chaînées |
 |
Les unions : une même zone mémoire peut être envisagée de différentes manières |
| Exercice : |
modélisation de l’UART du ColdFire au moyen d’une union et d’une structure à champs de bits et communication avec un terminal; mise en EPROM de l’application |