firmware-embedded.md 5.0 KB


name: firmware-embedded category: embedded public: false database: none hosting_hints:

  • bare-metal
  • microcontroller-flash
  • ota-server audit_stack:
  • analyze
  • code-clean
  • cso
  • doc plugins: context7: no ui-ux-pro-max: no gstack: no ---

Firmware / Embedded

Projet firmware bas-niveau / microcontrôleur (STM32, ESP32, RP2040, Nordic, AVR). Pas de système d'exploitation complet (bare-metal / RTOS léger type FreeRTOS/Zephyr).

Detection signals

Strong signals (×3)

  • FILE: platformio.ini (PlatformIO)
  • FILE: *.ld OR *.lds OR linker*.ld (linker scripts — signature bare-metal)
  • FILE: CMakeLists.txt contenant "arm-none-eabi" OR "riscv-none-elf" OR "xtensa-esp32" OR "ESP_PLATFORM" OR "STM32"
  • FILE: Kconfig (Zephyr RTOS)

Medium signals (×2)

  • FILE: Makefile avec variables CC / AS / LD / OBJCOPY
  • DIR: src/ avec fichiers .c / .cpp / .h ET absence de manifests langage haut-niveau (pas de package.json, Cargo.toml, go.mod, pyproject.toml)
  • DIR: drivers/ OR hal/ OR bsp/ OR mcu/
  • FILE: sdkconfig (ESP-IDF)
  • FILE: prj.conf (Zephyr)
  • FILE: idf_component.yml (ESP-IDF component)

Weak signals (×1)

  • FILE: openocd.cfg (debug probe config)
  • FILE: *.cfg contenant "adapter" OR "interface" OR "transport select"
  • EXT: outputs .bin, .hex, .uf2, .elf dans un build/ ou .pio/
  • DEP (platformio): "[env:*]" sections

Counter-signals (exclusion)

  • FILE: package.json AVEC deps JavaScript → app web (pas embedded)
  • FILE: Cargo.toml AVEC [dependencies] bibliothèques hautes → peut être Rust embedded (créer archetype rust-embedded plus tard)
  • FILE: .c files AVEC pyproject.toml / Cargo.toml contenant pybind/pyo3 → FFI bindings, PAS embedded

Implications

  • Cible : microcontrôleur (STM32/ESP32/RP2040/nRF/AVR/MSP430) / SoC bas-niveau / bare-metal
  • Base de données : aucune (stockage = flash interne / EEPROM / SD card brute)
  • SEO/GEO : N/A
  • Surface sécurité : SPÉCIFIQUE — buffer overflows stack/heap, secure boot, OTA integrity, JTAG exposé, downgrade attacks
  • UI/UX : N/A (sauf petits LCD/OLED)

Typical pain points

  • Buffer overflows : strcpy, strcat, sprintf sans bounds check
  • malloc dans ISR / sections critiques (hang potentiel)
  • Pas de watchdog timer activé
  • Optim compiler -O0 ou -O3 sans profil (bugs volatile manquent)
  • volatile oublié sur MMIO / variables partagées ISR-main
  • Pas de -Wall -Wextra -Wpedantic + -Werror
  • Linker script maison non audité (sections overlap / alignement incorrect)
  • Stack size insuffisant (crash silencieux par overflow)
  • Secrets / keys en dur dans le binaire (extractibles par dump flash)
  • Secure Boot / signing non activé
  • OTA sans vérification signature → persistant firmware malveillant possible
  • JTAG / SWD non désactivé en prod → extraction firmware / inject code
  • Debug logs activés en release (printf via UART exposé)
  • Ressources cycles hardcoded (sleeps en loops for) → non portable à autre horloge
  • Pas d'abstraction HAL → couplage MCU-specific partout
  • Timings critiques non mesurés (analyseur logique absent du workflow)
  • Energy profile ignoré (wake-up patterns sous-optimaux, sleep modes inutilisés)
  • Pas de tests unitaires (on-host avec mocks HAL absent)
  • CI sans cross-compilation (arm-none-eabi-gcc non disponible)
  • Documentation registres absente (cf datasheet + magic numbers dans le code)
  • Flash wear leveling ignoré (écritures fréquentes sur même secteur)

Interview questions (adaptive)

En plus du set minimum business :

  • MCU / SoC cible : famille (STM32Fxx / ESP32-S3 / RP2040 / nRF52 / autre) ?
  • Toolchain : GNU ARM / ESP-IDF / Zephyr / PlatformIO / Arduino / autre ?
  • Framework / RTOS : bare-metal / FreeRTOS / Zephyr / Mbed / Arduino / ESP-IDF ?
  • HAL / BSP : vendor HAL / CMSIS / libopencm3 / custom ?
  • Langage : C / C++ / Rust embedded / Ada ?
  • Standard C version (C99 / C11 / C17) + flags GCC ?
  • Secure Boot activé ? Signing firmware ?
  • OTA : présent / comment (MQTT / HTTP / custom) / signature vérifiée ?
  • Debug : JTAG / SWD en prod (devrait être désactivé) ?
  • Watchdog actif ? reset sources tracées ?
  • Power budget : ampérage / sleep modes utilisés ?
  • Memory budget : flash size / RAM size / current usage ?
  • Tests : on-host (Unity/CMocka/etc.) / on-target / HIL (hardware-in-loop) ?
  • CI : cross-compile + tests on-host ? lint (cppcheck, clang-tidy) ?
  • MISRA-C / CERT-C conformance ?
  • Product certifications visées (FCC / CE / CE-RED / FIPS / IEC 62443) ?
  • Bootloader : custom / vendor / MCUboot ?
  • Logs prod : UART / RTT / deep-ignored ?

Plugin recommendations

  • context7 : OFF — docs MCU (datasheets, ref manuals) PDF, hors scope context7
  • ui-ux-pro-max : OFF
  • gstack : OFF

Example project layout (PlatformIO STM32)

platformio.ini
include/
  config.h
src/
  main.c
  drivers/
    uart.c
    i2c.c
    gpio.c
  hal/
    stm32f4xx_it.c
  rtos/
    tasks.c
  app/
    sensor.c
    protocol.c
lib/
  external/
test/
  test_sensor.c
docs/
  datasheets/