Running Bare-Metal Rust Alongside ESP-IDF on the ESP32-S3's Second Core

· coding · Source ↗

TLDR

  • Tingou Wu’s walkthrough pins ESP-IDF and FreeRTOS to Core 0 of the ESP32-S3 while running bare-metal Rust on Core 1 with zero scheduler interference.

Key Takeaways

  • The ESP32-S3’s dual-core design allows a clean split: Core 0 handles Wi-Fi, BLE, and FreeRTOS; Core 1 runs deterministic bare-metal Rust.
  • Bare-metal Rust on Core 1 avoids FreeRTOS scheduling jitter, useful for real-time control loops or latency-sensitive firmware tasks.
  • This approach lets embedded Rust developers keep networking managed by the mature ESP-IDF stack without fighting the scheduler.
  • The technique targets ESP32-S3 specifically but the pattern applies wherever a dual-core MCU has one core free from a RTOS.

Hacker News Comment Review

  • Commenters questioned whether bare-metal isolation is necessary: a high-priority pinned FreeRTOS task on Core 1 with certain options disabled may achieve the same interference-free behavior with less complexity.
  • An alternative hardware approach surfaced: use Esp-Hosted-MCU firmware on a separate ESP32-C3 as a dedicated Wi-Fi/BLE coprocessor, offloading networking entirely rather than splitting cores on one chip.
  • The core trade-off is real and contested: dedicating an entire core to FreeRTOS/Wi-Fi is seen by some commenters as wasteful, especially on constrained hardware where both cores may be needed for application logic.

Notable Comments

  • @fjfaase: Argues a single pinned FreeRTOS task at the right priority may already give interference-free Core 1 execution, undercutting the need for bare-metal.
  • @ufocia: “giving up an entire core to Wi-Fi and Bluetooth seems wasteful” – sharp pushback on the resource cost of the split.

Original | Discuss on HN