View the site in Français Site displayed in English (USA) View the site in English (GB)
You are here: ac6 > ac6-formation > Languages > Real time programming
Download Catalog
Download Catalog
Download as PDF
Download as PDF
Write us
Write us
Printable version
Printable version
 

L71 Real time programming

La programmation embarquée et temps réel en C, C++ et Java(TM).

Java est une marque déposée de Sun Microsystems

formateur
Objectifs
bullet_jaune_1 Découvrir les concepts de base du multi-tâches et du temps réel
bullet_jaune_1 Apprendre à lire des diagrammes de conception temps-réel UML-RT
bullet_jaune_1 Comprendre le fonctionnement d'une chaîne de compilation
bullet_jaune_1 Analyser les options d'optimisation de code du compilateur
bullet_jaune_1 Développer des applications pour accéder aux ports d'E/S et gérer les interruptions
bullet_jaune_1 Interfacer C et assembleur pour mettre en œuvre des instructions spécifiques du processeur cible
bullet_jaune_1 Maîtriser les difficultés de la programmation concurrente
bullet_jaune_1 Connaitre les standards applicables
bullet_jaune_1 Découvrir les contraintes temps réel (déterminisme, interruptions, préemption...)
bullet_jaune_1 Comprendre les implications des architectures des processeurs en contexte temps-réel (cache, pipeline,...)
bullet_jaune_1 Mettre au point des applications multi-tâches
bullet_jaune_1 Utiliser le langages C pour implémenter un noyau temps-réel minimal
A la demande des développeurs auxquels elle est particulièrement destinée cette formation met principalement l'accent sur de nombreux exercices pratiques allant jusqu'à la réalisation effective d'un système temps-réel embarqué.
Les personnes désireuses d'un cours couvrant de façon plus large les problèmes d'utilisation d'UML/RT dans le contexte projet peuvent regarder également notre cours référence L70 - Les projets temps réel
Matériel
bullet_jaune_2 Un PC et une carte ColdFire par binôme
bullet_jaune_2 Chaîne de compilation croisée et sonde d'émulation BDM
bullet_jaune_2 Machine virtuelle Java
bullet_jaune_2 Manipulations et exercices en environnements natif et croisé
bullet_jaune_2 Un support de cours ainsi que la disquette contenant les exemples
Pré-requis
bullet_jaune_2 Connaissance de la programmation en C, C++ ou Java (niveau cours L2, L3 ou L4)
bullet_jaune_2 Connaissance d'un microprocesseur souhaitée
bullet_jaune_2 Connaissance de la programmation embarquée utile

Outline
Introduction au temps réel
bullet_jaune_2 concepts temps réel de base
bullet_jaune_2 contraintes particulières du temps réel
bullet_jaune_2 programmation structurée et objet
bullet_jaune_2 apports des techniques objets
L'approche temps réel avec UML
bullet_jaune_2 genèse d'UML
bullet_jaune_2 modèles UML standards
bullet_jaune_2 cycle de développement Objet
bullet_jaune_2 contraintes liées à l'interprétation des diagrammes
bullet_jaune_2 comment lire les diagrammes UML
Analyse des éléments constitutifs d'une chaîne de compilation
bullet_jaune_2 Explication des étapes du processus de génération de code en natif et en croisé
bullet_jaune_2 Rôle du compilateur, de l'assembleur et du linker
bullet_jaune_2 Paramétrage en fonction d'un mapping mémoire
bullet_jaune_2 Structure d'un programme source C, distinction des parties essentielles : préprocesseur, déclaration des variables globales, fonctions
bullet_jaune_2 Découpage d'une application en fichiers distincts
bullet_jaune_2 Le préprocesseur
bullet_jaune_2 Les instructions define et include
bullet_jaune_2 Ecriture de macros
bullet_jaune_2 Précautions à prendre dans les headers pour éviter les redéclarations de variables
bullet_jaune_2 Notion de projet, réalisation de librairies
Exercice : mise en œuvre de la chaîne de compilation et fabrication d'une librairie
Particularités de la programmation dans le contexte embarqué
bullet_jaune_2 Analyse d'une instruction de transfert assembleur pour comprendre l'accès à la mémoire
bullet_jaune_2 Mise en évidence de la distinction adresse / contenu
bullet_jaune_2 Calculs d'adresses, opérations mêlant pointeurs et adresses absolues
bullet_jaune_2 Les tableaux de pointeurs
Exercice : allocation d'un pointeur sur un port d'I/O
bullet_jaune_2 Accès aux champs d'une structure
bullet_jaune_2 Déclaration de variables et de pointeurs sur type structuré
bullet_jaune_2 Explication du padding imposé par les règles d'alignement : options pack du compilateur
bullet_jaune_2 Les formats big et little endian
bullet_jaune_2 Les structures à champ de bits : modélisation des périphériques
bullet_jaune_2 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
bullet_jaune_2 Utilité des tableaux de pointeurs sur des fonctions
Exercice : lancement d'une fonction à partir d'un tableau de pointeurs
bullet_jaune_2 Distinction entre adressage absolu et adressage relatif pour la relogeabilité du code et des données
bullet_jaune_2 Réentrance des handlers d'exception
bullet_jaune_2 Cstart : initialisation du pointeur de pile et mise à 0 des variables non initialisées
bullet_jaune_2 Inconvénients des fonctions Setjmp et Longjmp
bullet_jaune_2 Gestion de la mémoire
bullet_jaune_3 Algorithmes
bullet_jaune_3 Gestion des fuites mémoire
bullet_jaune_2 Mise en EPROM d'une application
Exercice : mise en évidence et détection de fuites mémoire
Principe de fonctionnement d'un système Temps réel et embarqué
bullet_jaune_2 Notion de tâche
bullet_jaune_2 Cadencement des tâches selon leur priorité, préemption
bullet_jaune_2 Sauvegarde de contexte
bullet_jaune_2 Nécessité d'un tick temps réel pour déclencher les commutations de tâches
Les traitements concurrents
bullet_jaune_2 Recensement des champs d'un descripteur de tâche
bullet_jaune_2 Réalisation d'une structure chaînée des tâches en attente d'exécution
bullet_jaune_2 Insertion d'un nouveau descripteur lors du chargement d'une nouvelle tâche
bullet_jaune_2 Exemple de règles d'ordonnancement: priorité évoluant en fonction du temps
bullet_jaune_2 Réorganisation de la file lors de l'invocation de l'ordonnanceur: préemption
Les interruptions
bullet_jaune_2 Nécessité des interruptions dans un système embarqué
bullet_jaune_2 Distinction entre déclenchement sur front et sur niveau
bullet_jaune_2 Acquittement logiciel
bullet_jaune_2 Ecriture d'un gestionnaire d'interruption : distinction des 3 étapes prologue / corps / épilogue
bullet_jaune_2 Table de vecteurs
bullet_jaune_2 Ecriture des fonctions d'installation et de lecture de vecteur
Exercice : lancement d'une action suite à une interruption
Mise au point
bullet_jaune_2 Communication avec la cible
bullet_jaune_2 Les différents niveaux de mise au point : C, assembleur
bullet_jaune_2 Les fenêtres du debugger : source, mémoire, pile et variables
bullet_jaune_2 Positionnement de points d'arrêt
bullet_jaune_2 Analyse de la pile et extraction des stacks frames correspondant aux fonctions imbriquées
bullet_jaune_2 Les procédés de mise au point sur les processeurs récents munis de cache : synchronisation avec un analyseur logique
La programmation dans le contexte multi-tâches
bullet_jaune_2 Structures de données:
bullet_jaune_3 Listes simplement chaînées
bullet_jaune_3 Listes doublement chaînées
bullet_jaune_3 Listes circulaires
bullet_jaune_3 Files d'attentes
bullet_jaune_3 Piles
Exercice : réalisation de listes chaînées utilisables en contexte multi-tâches
bullet_jaune_2 Noyau temps-réel minimal
bullet_jaune_3 descripteurs de tâches
bullet_jaune_3 scheduling
Exercice : réalisation d'un scheduler simple, "fair scheduling"
bullet_jaune_2 Synchronisation entre tâches
bullet_jaune_3 Modes de synchronisation
bullet_jaune_3 Primitives de synchronisation
Exercice : gestion d'un sémaphore, "fixed scheduling"
bullet_jaune_2 Gestion des accès concurrents
bullet_jaune_3 Variable simple
bullet_jaune_3 Structure de données
bullet_jaune_3 Entre tâches
bullet_jaune_3 Entre tâches et routines d'interruption
Exercice : synchronisation et communication entre tâches
bullet_jaune_2 Gestion de la mémoire
bullet_jaune_3 Algorithmes
bullet_jaune_3 Gestion des fuites mémoire
Exercice : mise en évidence et détection de fuites mémoire