Skip to content

Organisation du Projet

Structure

projetDemo2026/
β”œβ”€β”€ CMakeLists.txt              # Build configuration
β”œβ”€β”€ CMakePresets.json           # Build presets
β”œβ”€β”€ Core/
β”‚   β”œβ”€β”€ Inc/                    # Headers
β”‚   β”‚   β”œβ”€β”€ app_ui.h            # UI API (LVGL)
β”‚   β”‚   β”œβ”€β”€ app_audio.h         # Audio API (WAV)
β”‚   β”‚   β”œβ”€β”€ player.h            # Physique/collision
β”‚   β”‚   β”œβ”€β”€ freertos_app.h      # FreeRTOS config
β”‚   β”‚   └── *_hal.h             # HAL (adc, dac, gpio, i2c, etc)
β”‚   └── Src/
β”‚       β”œβ”€β”€ main.c              # Point d'entrΓ©e
β”‚       β”œβ”€β”€ app_ui.c            # Rendu LVGL
β”‚       β”œβ”€β”€ app_audio.c         # Lecteur WAV
β”‚       β”œβ”€β”€ player.c            # Physique
β”‚       β”œβ”€β”€ freertos.c          # FreeRTOS tasks
β”‚       └── *_hal.c             # HAL implementations
β”œβ”€β”€ Drivers/
β”‚   β”œβ”€β”€ CMSIS/                  # ARM CMSIS
β”‚   └── STM32F7xx_HAL_Driver/   # ST HAL
β”œβ”€β”€ Middlewares/Third_Party/
β”‚   β”œβ”€β”€ LVGL/                   # Librairie graphique
β”‚   β”œβ”€β”€ FreeRTOS/               # RTOS
β”‚   └── FatFs/                  # Filesystem
β”œβ”€β”€ Fonts/                      # Bitmap fonts
└── cmake/                      # CMake scripts

Modules ClΓ©s

Module Application (Core/Src/app_*.c)

app_ui.c β€” rΓ΄le et fonctions

  • RΓ΄le principal : interface entre la logique du jeu et LVGL. GΓ¨re la construction des Γ©crans, l'affichage des images et sprites, et l'actualisation framebuffer.
  • Fonctions clΓ©s :
  • initialisation de l'UI et des layers (background / foreground)
  • gestion du cache d'assets (chargement BMP, eviction LRU)
  • mise Γ  jour des positions de sprites et des labels (score, FPS)
  • orchestration du cycle de rendu (invalidation, lv_timer_handler, swap buffers)

player.c β€” rΓ΄le et fonctions

  • RΓ΄le principal : simulation physique et Γ©tats du joueur (position, vitesse, collisions, animations).
  • Fonctions clΓ©s :
  • initialisation et rΓ©initialisation du joueur
  • Player_Update() : appliquer gravitΓ©, lire entrΓ©e, dΓ©placer, dΓ©tecter collisions
  • gestion des Γ©tats d'animation (IDLE, WALK, JUMP)
  • helpers collision AABB et rΓ©solution de pΓ©nΓ©tration

app_audio.c β€” rΓ΄le et fonctions

  • RΓ΄le principal : pipeline de lecture audio WAV via FatFs β†’ ring buffer β†’ DAC + DMA.
  • Fonctions clΓ©s :
  • dΓ©couverte et ouverture de fichiers WAV sur la carte SD
  • parsing header WAV et configuration du ring buffer
  • dΓ©marrage/arrΓͺt du DAC + configuration DMA
  • AppAudio_Process() : remplissage pΓ©riodique du buffer, gestion volume et Γ©tat
  • hooks pour callbacks DMA / TIM (synchronisation audio)

Module MatΓ©riel (Core/Src/*_hal.c)

Chaque pΓ©riphΓ©rique a son module :

  • gpio.c : Configuration GPIO pour contrΓ΄le
  • ltdc.c : LTDC display controller (480x272 RGB565)
  • dac.c : Digital-Analog Converter pour audio
  • tim.c : Timers (TIM2 pour sync audio)
  • dma.c : Direct Memory Access (transfers parallΓ¨les)
  • i2c.c : I2C (Γ©cran tactile FT5336)
  • spi.c : SPI (optionnel, SD card)
  • fmc.c : Flexible Memory Controller (SDRAM)

FreeRTOS (Core/Src/freertos.c)

// CrΓ©ation des tΓ’ches
xTaskCreate(render_task, "render", 2048, NULL, 2, NULL);
xTaskCreate(game_logic_task, "game", 2048, NULL, 2, NULL);
xTaskCreate(audio_task, "audio", 1024, NULL, 1, NULL);

// Synchronisation
xSemaphore vsync_semaphore;  // SignalΓ© au vsync
xMutex sdram_mutex;          // Accès SDRAM thread-safe

πŸ”„ Flux de DonnΓ©es

    SD Card (BMP + WAV)
           ↓
       FatFs
           ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”
    ↓             ↓
  Images        Audio
    ↓             ↓
App UI        App Audio
    ↓             ↓
  LVGL β†’ LTDC    DAC
    ↓             ↓
  Display      Speaker

Layers Architecturaux

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Gameplay Layer                         β”‚
β”‚  (player.c, collision, logic)           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Application Layer                      β”‚
β”‚  (app_ui.c, app_audio.c, main.c)       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Middleware Layer                       β”‚
β”‚  (LVGL, FreeRTOS, FatFs)                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  HAL/Driver Layer                       β”‚
β”‚  (Peripheral abstractions)              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Hardware Layer                         β”‚
β”‚  (STM32F746 + peripherals)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Prochaine lecture : LVGL et son utilisation