ATELIER CAP’TRONIC : Programmation temps réel avec FreeRTOS pour Coeur ARM 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 de cet atelier :
• Acquérir une compréhension globale de l’architecture Cortex-M
• Comprendre la mise en œuvre logicielle du Cortex- M et déboguer
• Gérer les interruptions
• Comprendre l’architecture STM32F2
• Découvrir les notions de temps réel multitâches
• Comprendre les vraies contraintes de temps sur les ressources mutuelles
• Comprendre l’architecture de l’OS FreeRTOS
• Découvrir les différents services et API de FreeRTOS
• Apprendre à développer et déboguer les applications FreeRTOS
PROGRAMME
- Jour 1
Cortex- M : Présentation de l’architecture (6h30)V7-M Présentation de l’architecture
Core Architecture
o Harvard Architecture, I- Code, D-Code et le système de bus
o Buffer d’écriture
o Bit-Banding
o Registres (Deux pointeurs de piles)
o Etats
o Mode de marche et niveaux de privilèges
o Block Control System
o SysTick minuterie
o MPU PrésentationProgrammation
o Alignement et Endianness
o CMSIS BibliothèquePrésentation des mécanismes d’Exception / Interruption
o Table des vecteurs
o Entrée et sortie d’interruptions
- Queue-chaînage
- Préemption (Nesting)
o NVIC : contrôleur d’interruption intégré
o Gestion des exceptions et des priorités
o Escalade des défautsInterface de débogage
o Cortex- M3 JTAG et unités connexes de débogage : SWJ -DP, AHB- AP
o Avantages de Debug Wire Serial
o Mécanisme pour sélectionner le JTAG -DP ou le SW- DP
o Flash Patch et points d’arrêt
o Les données Watchpoint et Trace
o Instrumentation Trace Macrocell , Trace Interface Unit Port , trace entonnoir
Démo : Se familiariser avec l’ IDE et clarifier la séquence de démarrage
Atelier : Gestion des interruptions sur Cortex- M3 (mis en tail-chaining/nesting)
Conseils du compilateur et astuces pour Cortex-M (30min)
Optimisations du compilateur ARM
Mélanger C et Assembleur
Codage avec compilateur ARM
L’attribut volatile
Endianness
Les accès non alignés, padding
Les problèmes de données locales et globales, l’alignement, la structure
- Jour 2
STM32F2 MCU : Présentation de l’architecture (1h30)Architecture ARM à base de noyau
Description de l’architecture SoC STM32F20X
Clarifier les données internes et les chemins d’instruction : Matrice Bus, AHB- Lite interconnexion , bus périphériques , AHB- à -APB ponts, DMA
Organisation de la mémoire
o Interface de lecture de mémoire flash
o Adaptive Real-Time memory accelerator, instruction prefetch, queue and branch cache
o Effacement de secteur et de masse
o Interne SRAM
- L’accès simultané à 112 Ko et 16 blocs KBSoC mapping
Les méthodes de programmation en flash
Configuration du Boot
Démo : copie de données en utilisant le DMA ou non
RTOS Introduction (30min)
Le code source de FreeRTOS (15min)
Introduction à FreeRTOS
o L’architecture et les caractéristiques FreeRTOS
Obtenir les sources de FreeRTOS
o Fichiers et structure des répertoires
Les types de données et le style de codage
o Les conventions de nommage
FreeRTOS sur Cortex -M
Introduction au temps réel (15min)
Base des concepts du temps réel
Les contraintes temps réel
Temps réel et Multi- tâche
Structures de données des Threads (1h00)
Nécessité de structures de données spécifiques
Structure de données sur pour implémentation des threads
o Linked list
o Listes circulaires
o FIFO
o Stacks
Structures de données et preuves d’intégrité
o Assertions
o Post et pré conditions
Atelier : Construire un thread générique avec des linked-list
Elément d’un système temps réel (1h00)
Les tâches et les descripteurs de tâches
o Contenu du descripteur de tâche
o Liste des descripteurs de tâches
Changement de contexte
Ordonnancement des tâches et préemption
o Ordonnancement « tick based »
Les systèmes d’ordonnancement et la preuve d’ordonnançabilité
o Ordonnancement en priorités fixes
o Ordonnancement RMA et EDF
Ordonnancement avec FreeRTOS
o Ordonnancement préemptif déterministe
- Stratégies d’ordonnancement
- Programmation cyclique (RMA)
- Ordonnancement de limite
o Ordonnancement Coopératif
- Ordonnancement hybride
Démo : Analyse d’un changement de contexte
Gestion des tâches (2h30)
cycle de vie des tâches
o Création de tâches
o Suppression des tâches
o Le modèle de boucle sans fin
Les priorités
o Affectation des priorités de tâches
o Changement de priorités de tâches
La tâche Idle
o Hook de la tâche Idle
Calendrier
Fonctions de débogage FreeRTOS (Hook, Trace)
Atelier : Gestion des tâches , se tracer informations
- Jour 3
Gestion de la mémoire (1h00)Algorithmes de gestion de mémoire
o Système amis
o Best Fit /First Fit
o Gestion des poolsLes systèmes d’allocation mémoire fournis par FreeRTOS
o Buddy system
o Best Fit /First Fit
o Thread-safe mallocVérification de la mémoire libre restante
Ajout d’un allocateur de mémoire spécifique à l’application
Les erreurs de gestion de la mémoire
Surveillance de la pile
Dimensionnement Stack et Heap
Les erreurs de gestion de la mémoire
Surveillance de la pile
Démo : Ecrire un système de gestion de mémoire thread-safe
Démo : Détecter un débordement de pile
Primitives de synchronisation (1h30)
Présentation
o Attente et réveil des tâches
o Sémaphores
o Événements
o Boîtes aux lettres
Sémaphores binaires de FreeRTOS
o « Set » de sémaphore binaire
o « get » de sémaphore binaire
Gestion des files d’attente de FreeRTOS
o Utilisation de base
- Création
- Envoi dans une file d’attente
- Réception à partir d’une file d’attente
o La gestion des données
- Envoi types de composés
- Transfert de données volumineuses
Atelier : Synchronisation de tâches à travers des sémaphores binaires
Atelier : Synchronisation de tâches à travers les files d’attente
Gestion des ressources (1h00)
Exclusion mutuelle
o Spinlocks et masquage d’interruption
o Mutex ou Semaphore
o Mutex récursifs ou non
o Problème d’inversion de priorité
o Héritage de priorité
L’exclusion mutuelle avec FreeRTOS
o Les mutex et les sémaphores binaires
o Blocages
o Inversion de priorité
o L’héritage de priorité
Les sections critiques
o Les sections critiques
o Suspension ( blocage ) de l’ordonnanceur
Tâches Gatekeeper
Atelier : Mettre en œuvre l’exclusion mutuelle entre deux tâches
Parallélisme : Problèmes et Solution (1h00)
Les problèmes de programmation parallèle
o Accès parallèle incontrôlé
Démonstration : Le modèle producteur-consommateur, illustrant les problèmes d’accès concurrents
o Blocages
o Cycle non productif
o Starvation
Démonstration : Le problème des ‘Philosophers dinner’, illustrant deadlock, livelock et starvation
Management des interruptions (1h30)
Traitement d’interruption différée par FreeRTOS
o Les tâches avec synchronisation d’interruption
o Utilisation des sémaphores dans une ISR
o Sémaphores de comptage
o Utilisation des files d’attente dans une ISR
Traitement d’interruption par FreeRTOS
o ISR d’écriture en C
o Fonctions de sécurité d’interruption
o Interruption de nidification
Atelier : Synchroniser des interruptions avec des tâches
Timer logiciel (1h00)
La Task Timer daemon
Configuration du Timer
One-shot / Auto -reload Timer
API du Timer logiciel
Atelier : Mise en œuvre de Timers logiciel