Logo de la rubrique ATELIER : Programmation temps réels avec FreeRTOS pour un cœur Cortex-M

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

Les inscriptions sont closes. Pour connaitre les prochaines sessions de formation sur Logiciel embarque et programmation cliquez ici.