ATELIER : Programmation temps réels avec FreeRTOS pour un cœur Cortex-M
Pour connaitre les prochaines sessions de formation sur Logiciel embarque et programmation cliquez ici.
L’architecture ARM est connue pour offrir un des meilleurs ratios performance/efficacité du marché, tout en consommant très peu d’énergie. Ces architectures ARM ont d’ailleurs pris naturellement possession du marché de la mobilité et équipent l’essentiel des smartphones du marché et de nombreux produits embarqués industriels.
Le noyau temps réel FreeRTOS est particulièrement bien adapté à ces architectures par sa faible empreinte et ses performances.
OBJECTIFS
• Avoir une vue d’ensemble sur les architectures Cortex-M
• Comprendre l’implémentation et le debug des programmes sur Cortex-M
• Comprendre la gestion des interruptions
• Avoir une vue d’ensemble sur les architectures STM32F
• Découverte du concept du multitâche temps-réels
• Comprendre les contraintes temps réels lors de la mutualisation des ressources.
• Comprendre l’architecture FreeRTOS
• Découverte des services et API FreeRTOS.
• Apprendre comment développer et debugger des applications sous FreeRTOS
PROGRAMME
JOUR 1
Cortex-M Architecture Overview (6h30)
- V7-M Architecture Overview
- Core Architecture
o Harvard Architecture, I-Code, D-Code and System Bus
o Write Buffer
o Bit-Banding
o Registers (Two stacks pointers)
o States
o Different Running-modes and Privileged Levels
o System Control Block
o Systick Timer
o MPU Overview - Programmation
o Alignement & Endianness
o CMSIS Library - Gestion des Exceptions et Mécanisme de gestion des interruptions
o Table de vecteur
o Appel et retour d’Interruption
Tail-Chaining
Pre-emption (Nesting)
o Contrôleur d’IT : NVIC
o Gestion des priorités
o Remontée des défauts - Interface de Debug
o Unité de debug Cortex-M3 JTAG debug : SWJ-DP, AHB-AP
o Avantage du debug Série
o Mécanisme de sélection du JTAG-DP ou du SW-DP
o Flash Patch et Breakpoints
o Data Watchpoint et Trace
o Instrumentation Trace Macrocell, Trace Port Interface Unit, Trace funnel - Démonstration : familiarisation avec l’IDE et la séquence de boot
- Travaux pratiques : gestion des interruptions sur Cortex-M3
Trucs et astuces de compilation pour Cortex-M (30min) Optimisation
- Programmation mixte C & Assembleur
- Coder avec le compilateur ARM
- Usage de l’attribut volatile
Approfondissement des notions de variables locales & globales, d’alignement et de structure
JOUR 2
Vue d’ensemble du processeur STM32F2 (1h30)
- Présentation de l’architecture du cœur ARM
- Présentation de l’architecture du SoC STM32F20X.
- Clarification des chemins internes pour les données et les instructions : Bus Matrix, AHB-lite interconnect, peripheral buses, AHB-to-APB bridges, DMAs
- Organisation de la mémoire
o Interface de lecture de la mémoire Flash
o Instruction prefetch, queue & branch cache
o Accélérateur temps réels,
o Effacement d’un secteur & effacement de masse
o SRAM interne : Access concurrentiel entre blocs 112 KB &16 KB - Cartographie mémoire du SoC
- Méthodes de programmation de la Flash
- Configuration de Boot
- Démonstration : Comparaison des performances de la copie de données avec ou sans DMA.
Introduction sur l’OS Temps Réels (30min)
- Le code source du FreeRTOS
- Introduction à FreeRTOS
- Caractéristiques et architectures de FreeRTOS
- Obtenir le code source du FreeRTOS
- Structure des répertoires et des fichiers
- Types de données & de codage
- Conventions synthaxique
- FreeRTOS sur processeur Cortex/M
- Introduction au temps réels
- Concepts de base
- Les contraintes temps réels
- Multitâches & temps réel.
Structures des données (1h)
- Nécessité d’une structure de données spécifiques
- Structures données « Thread safe »
o Listes liées
o Listes Circulaires
o FIFOs
o Stacks - Intégrité des structures de données
o Assertions
o Pre & post-conditions
o Travaux Pratiques : Construire une liste chaînée de « thread safe »
Éléments sur le système temps réel (1h)
- Tâches et descripteurs de tâches
- Changement de contexte (Context Switch)
- Séquenceur de taches et préemptions
- Séquencement systèmes
o Séquencement à priorité fixe
o Séquencement RMA & EDF - Séquencement sous FreeRTOS
o Séquencement deterministe et préemptif
o Stratégie de séquencement
Séquencement cyclique (RMA)
Séquencement à Deadline
o Séquencement Cooperatif
o Séquencement Hybride
o Démonstration : Analyse d’un changement de contexte
Gestions des tâches (2h30)
- Cycle de vie d’une tâche : Créer une tâche, Détruire une tâche, Boucle sans fin.
- Gestion de la priorité des tâches : Assignation des priorités, Changement de priorités
- La tâche « Idle »
- Timing
- Capacités de debug sous FreeRTOS (Hook, Trace)
- Travaux Pratiques : Management de tache, capture des informations de trace
JOUR 3
Gestion de la mémoire (1h)
- Algorithme de gestion de la mémoire
o Buddy System
o Best fit / First Fit
o Pools Management - Schémas d’allocations mémoires
- Les erreurs de « Memory management »
- Moniteur de pile (Stack monitoring)
- Dimensionnement de la pile (Stack) et du tas (Heap)
- Démonstrations : Ecrire une simple « thread safe »
- Démonstrations : Détection de « stack overflow »
Primitives de Synchronisation (1h30)
- Introduction
o Attente and réveils de tâches
o Sémaphores
o Events
o Mailboxes - Sémaphores binaires
- Queue Management
o Usage de base : Création, envoi, réception
o Data management - Travaux Pratiques : Synchroniser une tâche avec une autre en utilisant un sémaphore binaire
- Travaux pratiques : Synchroniser une tâche avec une autre à travers une « queue »
Management des ressources (1h)
- Exclusion Mutuelle
o Spinlocks & masque d’interruption
o Mutex ou Sémaphore
o Mutex récursif ou non récursif
o Problème d’inversion de priorité - Exclusion Mutuelle sous FreeRTOS
- Sections Critiques
- Tâches « Gatekeeper »
- Travaux Pratiques : Implémentation d’une exclusion mutuelle entre deux tâches
Solutions au problème de Parallélisme (1h)
- Problème de la programmation parallèle
o Accès parallèle non contrôlé - Démonstration : Problème producteur-consommateur : illustration du problème d’accès concurrentiel
o Deadlocks
o Livelocks
o Starvation - Démonstration : Problème du diner des philosophes : illustration du deadlock, livelock & starvation
Gestion des interruptions (1h30)
- Processus d’interruptions sous FreeRTOS
Tâche avec synchronisation d’ITs
Utilisation de sémaphores dans un ISR
Comptage de sémaphores
Utilisation de « queues » dans un ISR - Processus de gestion d’It sous FreeRTOS
Ecrire une ISRs in C
Imbrication d’interruptions - Travaux Pratiques : Synchronisation d’interruptions avec des tâches
Timer Logiciel (1h)
- La tâche « Timer Daemon »
- Configuration du timer
- API du Timer
- Travaux pratiques : Implémentation d’un timer logiciel
INFORMATIONS PRATIQUES
Date et lieu :
- 15 au 17 novembre 2017 de 09h00 à 12h30 et de 13h30 à 17h00
- IMS – Bât A31 - 351 Cours de la Libération - 33405 TALENCE CEDE