Embedded Firmware Engineer

Writes bare-metal and RTOS firmware for ESP32, STM32, and Nordic microcontrollers.

2|Updated May 21, 2026
One-click install
npx skills add https://github.com/tcvdog/agency-agents-hermes --skill embedded-firmware-engineer-tcvdog
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: Embedded Firmware Engineer
Source: https://github.com/tcvdog/agency-agents-hermes/tree/main/engineering/embedded-firmware-engineer
Command: npx skills add https://github.com/tcvdog/agency-agents-hermes --skill embedded-firmware-engineer-tcvdog

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Embedded firmware development demands strict control over memory, timing, and peripheral behavior, and mistakes like stack overflows, blocking ISRs, or unchecked HAL return values cause failures that only appear in production. This Skill provides expert guidance and code patterns for writing deterministic, hardware-aware firmware on resource-constrained MCUs. ## Core Features & Use Cases - RTOS Task Architecture: Designs FreeRTOS task layouts with calculated stack sizes, correct priorities, and queue-based inter-task communication that avoids priority inversion and deadlocks. - Peripheral Driver Implementation: Produces drivers for UART, SPI, I2C, CAN, BLE, and Wi-Fi using ESP-IDF, STM32 HAL/LL, and Nordic nRF Connect SDK with mandatory error handling on every path. - Power, OTA, and Debugging: Covers ESP32 deep sleep, STM32 STOP/STANDBY modes, OTA updates with rollback, MCUboot on Zephyr, and core dump or SystemView trace analysis. - Use Case: You are building a battery-powered BLE sensor node on an nRF52. Use this Skill to design the Zephyr application with proper advertising setup, System OFF sleep configuration, and non-blocking sensor sampling tasks. ## Quick Start Ask the agent to write a FreeRTOS sensor sampling task for ESP32 using ESP-IDF with a queue, proper stack sizing, and full error handling.

Frequently Asked Questions about Embedded Firmware Engineer

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a FreeRTOS task on ESP32 with ESP-IDF?▼

Create a FreeRTOS task with xTaskCreate, passing a defined stack size, priority, and task function that loops on queue receives or sensor reads. Use xQueueCreate for inter-task communication and pdMS_TO_TICKS for delays, and verify stack headroom with uxTaskGetStackHighWaterMark.

STM32 HAL vs LL drivers: which should I use for timing-critical code?▼

Prefer STM32 LL drivers over HAL for timing-critical code because they have lower overhead and more direct register access. HAL is acceptable for initialization and non-critical paths, but never poll inside an ISR regardless of the driver layer.

Can I use malloc inside FreeRTOS tasks on embedded systems?▼

Dynamic allocation with malloc or new should be avoided in RTOS tasks after initialization. Use static allocation or memory pools instead, since heap fragmentation on constrained MCUs causes unpredictable allocation failures in long-running production firmware.

Why does my ESP32 firmware crash with a stack overflow?▼

Stack overflows happen when task stack sizes are guessed rather than calculated, or when large buffers are placed on the stack. Measure actual usage with uxTaskGetStackHighWaterMark in FreeRTOS and size stacks with margin based on the measurement.

How do I set up BLE advertising on Nordic nRF52 with Zephyr?▼

Set up BLE advertising with bt_le_adv_start using a bt_data array containing flags and the device name from CONFIG_BT_DEVICE_NAME. Always check the returned error code and log failures, and configure peripherals through Zephyr devicetree and Kconfig rather than hardcoded addresses.

What are the limitations of calling FreeRTOS APIs from an ISR?▼

Only FromISR variants of FreeRTOS APIs are safe inside interrupt handlers, and blocking calls like vTaskDelay or xQueueReceive with infinite timeout are forbidden. Keep ISRs minimal and defer real work to tasks via queues or semaphores.