--- 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/ ```