Architecture et Gestion Mémoire des Microcontrôleurs STM32

Différences Mémoire Flash et RAM

Les microcontrôleurs STM32 utilisent une architecture Harvard où le code et les données sont stockés séparément : la Flash pour le code (non volatile) et la SRAM pour les données (volatile). Contrairement aux architectures x86 de type Von Neumann où code et données partagent la même mémoire RAM.

Concepts Fondamentaux

Mémoire Flash

Mémoire non volatile stockant le code exécutable et les constantes. Dans STM32, il s'agit de NOR Flash permettant une exécution directe du code. Organisée en pages (1-2 Ko), elle comprend :

  • Mémoire principale : Code et constantes (adresse 0x08000000)
  • Bloc d'information : Bootloader et paramètres système

Mémoire RAM (SRAM)

Mémoire volatile rapide (0x20000000) pour le stockage temporaire des données. Type SRAM avec accès aléatoire. Utilisée pour :

  • Variables globales initialisées (.data)
  • Variables non initialisées (.bss)
  • Pile (stack) et tas (heap)

Architecture Mémoire STM32

Modèle Cortex-M3

Espace d'adressage 32 bits (4 Go) avec mappage linéaire. Zones critiques :

0x08000000 : Début Flash
0x20000000 : Début SRAM
0x1FFFF000 : Mémoire système (bootloader)

Organisation de la Flash

Contrôlée par le Flash Memory Interface. Écriture/effacement gérés par programmation interne. La lecture est bloquée pendant les opérations d'écriture.

Gestion Mémoire des Applications

Segments de Données en C/C++

  • .text : Code machine (Flash)
  • .rodata : Constantes (Flash)
  • .data : Variables initialisées (Flash → RAM au démarrage)
  • .bss : Variables à zéro (RAM)
  • Heap : Allocation dynamique (malloc/free)
  • Stack : Variables locales et contexte d'appel

Consommation Mémoire après Compilation

Avec MDK (Keil) :

Flash = Code + RO-data + RW-data
RAM = RW-data + ZI-data

Avec GCC :

Flash = .text + .data
RAM = .data + .bss

Configuration Mémoire

Le heap et la stack sont définis dans startup_stm32fxxx.s :

Stack_Size EQU 0x400   ; 1 Ko
Heap_Size  EQU 0x200   ; 512 octets

Le heap croît vers les adresses hautes, la stack décroît depuis __initial_sp. Les débordements écrasent les zones adjacentes.

Analyse du Fichier .map (MDK)

  • Section Cross References : Appels de fonctions entre fichiers
  • Symbol Tables : Adresses des variables/fonctions locales/globales
  • Memory Map : Mappage détaillé Flash/RAM
  • Component Sizes : Taille des segments (.text, .data, etc.)
Exemple d'entrée RAM :
0x20000000 .data
0x20000100 .bss
0x20000200 Heap (taille configurée)
0x20000400 Stack

Compléments Techniques

Modes de Démarrage

BOOT0 BOOT1 Mode
0 X Flash Utilisateur (0x08000000)
1 0 Bootloader Système (0x1FFFF000)
1 1 SRAM (0x20000000)

Différences Architectures CPU

STM32 (Harvard/RISC) :

  • Instructions simples et pipelinées
  • Accès mémoire limité aux opérations Load/Store

x86 (Von Neumann/CISC) :

  • Instructions complexes (microprogrammes)
  • Code et données dans la même mémoire

Étiquettes: STM32 Flash SRAM Cortex-M FichierMAP

Publié le 15 juillet à 10h14