Accueil du site - Catalogue de formations - Formations développement - Formation C : le langage C pour l’embarqué
Savoir développer en langage C pour des applications embarquées

Prochaine session :
- intra sur demande


Contact : 2i2L - Informatique Internet et Logiciels Libres. Tel. : 02 40 37 02 06 – Mobile : 06 07 38 14 18 – Courriel : formation chez 2i2l.fr


Résumé de la formation :

- Logiciels : chaîne de production gcc et outils de debug gdb/ddd, simulations avec QEMU (cible arm) et VirtualBox (cible « PC »)
- Durée : trois (3) ou quatre (4) jours

- Objectifs : permettre d’appréhender les contraintes d’un programme fonctionnant sur une machine à ressources réduites et acquérir les bonnes pratiques pour l’écriture de programme en langage C sur des plateformes dites embarquées.

Cela comprend en particulier :
- connaître le détail de l’interaction avec le compilateur, en tenant compte de différentes cibles/coeur processeur,
- savoir manipuler les données complexes (formation de quatre jours) : chaînes et tableaux ; les grands nombres,
- maîtriser l’organisation de la mémoire,
- connaître les bons usages de la mémoire : passage de paramètres, cycle de vie d’une donnée dans la pile,
- savoir gérer le temps et le traitement des interruption/exceptions,
- connaître les règles pour un debug efficace,
- connaître les règles pour le bon usage du compilateur : optimisations explicites ou implicites,
- connaître les bonnes pratiques d’un développement multitâches.

- Pré-requis : avoir réalisée une première expérience dans le développement en langage C
- Pédagogie : chaque aspect théorique est illustré par des exemples concrets issus de cas réels de traitements en embarqué. Des travaux pratiques mettant en œuvre l’ensemble des savoirs sont réalisés dans des machines virtuelles et sur des cartes réelles.


Programme

Les données complexes (en option sur 4 journées)
- maîtriser les chaînes de texte (ascii 7bits, ascii 8bits et codepages, UTF)
- connaître les représentations de nombres, le format Q15, les nombres à virgule flottante (l’IEEE754 avec et sans utilisation d’une FPU)
- maîtriser le transtypage et le changement de représentation
- connaître les structures, unions, et types complexes
- maîtriser l’alignement des structures

L’organisation de la mémoire
- connaître le détail de l’accès aux données, registres, caches et mémoires externes
- connaître le détail du fonctionnement d’un cache (I et D) et impact sur les performances
- connaître le fonctionnement d’une MPU et d’une MMU
- connaître le fonctionnement et les usages des DMA
- Utiliser les variables avec volatile

Les bons usages de la mémoire
- maîtriser la portée, la visibilité des données
- maîtriser l’utilisation de constantes : les économies possibles de RAM
- maîtriser les passages de données entre fonctions (registres, pile)
- maîtriser l’utilisation de pointeurs
- maîtriser l’analyse détaillée de la pile (cycle de vie des données, cadre de pile, risques de débordements)
- maîtriser la gestion de la mémoire dynamique

L’utilisation du compilateur
- maîtriser les étapes de traduction du code
- maîtriser la production du code final (linker) et savoir ajouter des librairies
- maîtriser la localisation des différentes sections (par exemple avec l’analyse du format ELF)
- maîtriser les scripts personnalisés pour le linker

Les règles pour un debug efficace
- connaître l’impact de l’utilisation de la console
- connaître les points d’arrêts matériels et logiciels

Le multi-tâches
- timer matériel et compteurs logiciels, analyse des choix possibles pour la mesure du temps
- détails de fonctionnement des interruptions (priorité, section critique, sauvegarde de contexte)
- utilisation de plusieurs contextes et introduction aux scheduler : avantages et impacts
- mise en œuvre d’applications concurrentes avec un scheduler préemptif sur une cible mono-cœur type ARM cortex-M3 (sans MMU). Possibilité de prévoir des applications sur composant multi-coeur (type cortex-A8), sur demande.
- files de messages et communication inter-processus
- usages et impacts des briques matérielles (MPU / MMU)
- introduction aux architectures multi-cœurs
- gestion de la synchronisation et de la concurrence d’accès