关于 embedded-systems
面向嵌入式开发者的软件开发 Skill,涵盖 RTOS、裸机固件和 Embedded Linux,并提供硬件、安全、功耗、调试及实现模式方面的指导。
主要功能
- 01RTOS 与裸机开发指导
- 02Embedded Linux 构建指导
- 03驱动与外设开发
- 04OTA 更新策略
- 05调试与安全实践
适用场景
- 01开发微控制器固件
- 02配置 Zephyr 或 FreeRTOS
- 03构建传感器和外设驱动
- 04分析硬件故障或崩溃转储
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill embedded-systems安装后在 Claude Code 中输入/embedded-systems确认已加载。
详细介绍
嵌入式系统工程师
目的
提供嵌入式软件开发方面的专业知识,专攻 RTOS、裸机固件和嵌入式 Linux。重点关注安全关键型代码、功耗优化,以及面向微控制器(STM32、ESP32)和嵌入式 Linux 系统的硬件抽象。
适用场景
- 为微控制器(STM32、NXP、ESP32)编写固件
- 配置实时操作系统(Zephyr、FreeRTOS)
- 开发传感器/外设驱动程序(I2C、SPI、UART)
- 构建嵌入式 Linux 系统(Yocto、Buildroot)
- 实现 OTA(Over-The-Air)更新机制
- 分析崩溃转储或调试硬件故障(JTAG/SWD)
2. 决策框架
OS 选择
What is the hardware capability?
│
├─ **Microcontroller (MCU) - < 1MB RAM**
│ ├─ Hard Real-Time? → **Zephyr / FreeRTOS** (Preemptive scheduler)
│ ├─ Safety Critical? → **SafeRTOS / Rust (Bare Metal)**
│ └─ Simple Loop? → **Bare Metal (Superloop)**
│
└─ **Microprocessor (MPU) - > 64MB RAM**
├─ Complex UI / Networking? → **Embedded Linux (Yocto/Buildroot)**
└─ Hard Real-Time? → **RT-Linux (PREEMPT_RT)** or **Dual Core (Linux + MCU)**
语言选择(2026 年标准)
| 语言 | 使用场景 | 建议 |
|---|---|---|
| C (C11/C17) | 遗留代码 / HAL | 仍占主导地位。使用严格的静态分析(MISRA)。 |
| C++ (C++20) | 复杂逻辑 | 在嵌入式环境中使用 noexcept、no-rtti。零成本抽象。 |
| Rust | 新项目 | 高度推荐。 无需 GC 的内存安全。embedded-hal。 |
| MicroPython | 原型开发 | 适合快速测试,不适合生产环境实时应用。 |
更新策略(OTA)
- 双分区(A/B): 安全,但需要 2x Flash。
- 压缩镜像: 节省 Flash,但解压需要 RAM。
- 差分更新: 带宽占用最少,但补丁逻辑复杂。
危险信号 → 升级至 security-engineer:
- 生产设备上的 JTAG 端口未关闭
- Secure Boot 密钥以明文形式存储在代码中
- 固件更新未签名(仅检查完整性,不验证真实性)
- C 代码中使用
strcpy或无界缓冲区
工作流 2:Zephyr RTOS 应用
目标: 通过 I2C 读取传感器并打印到控制台。
步骤:
-
设备树(
app.overlay)&i2c1 { status = "okay"; bme280@76 { compatible = "bosch,bme280"; reg = <0x76>; label = "BME280"; }; }; -
配置(
prj.conf)CONFIG_I2C=y CONFIG_SENSOR=y CONFIG_CBPRINTF_FP_SUPPORT=y -
代码(
main.c)#include <zephyr/kernel.h> #include <zephyr/device.h> #include <zephyr/drivers/sensor.h> void main(void) { const struct device *dev = DEVICE_DT_GET_ANY(bosch_bme280); while (1) { sensor_sample_fetch(dev); struct sensor_value temp; sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &temp); printk("Temp: %d.%06d C\n", temp.val1, temp.val2); k_sleep(K_SECONDS(1)); } }
4. 模式与模板
模式 1:状态机(裸机)
使用场景: 无操作系统时处理复杂设备逻辑。
typedef enum { STATE_IDLE, STATE_READING, STATE_SENDING, STATE_ERROR } SystemState;
void loop() {
static SystemState state = STATE_IDLE;
switch(state) {
case STATE_IDLE:
if (timerExpired()) state = STATE_READING;
break;
case STATE_READING:
if (readSensor()) state = STATE_SENDING;
else state = STATE_ERROR;
break;
case STATE_SENDING:
sendData();
state = STATE_IDLE;
break;
// ...
}
}
模式 2:中断延迟处理
使用场景: 缩短 ISR(中断服务例程)的执行时间。
- ISR: 设置标志或将数据推入环形缓冲区。立即返回。
- 主循环 / 任务: 检查缓冲区/标志并处理数据(例如,解析 GPS NMEA 字符串)。
- 原因? 长时间运行的 ISR 会阻塞其他中断并导致系统崩溃。
模式 3:看门狗喂狗程序
使用场景: 系统冻结时自动重置。
void watchdog_task(void *pvParameters) {
while(1) {
// Only kick if critical flags are set
if (check_system_health()) {
wdt_feed();
}
vTaskDelay(1000);
}
}
6. 集成模式
iot-engineer:
- 交接: 嵌入式工程师编写驱动程序(I2C)→ IoT 工程师编写 MQTT 逻辑。
- 协作: 功耗预算(无线电唤醒频率)。
- 工具: Power Profiler。
mobile-app-developer:
- 交接: 嵌入式工程师实现 BLE GATT 服务端 → 移动端开发者实现客户端。
- 协作: 定义 GATT 服务/特征 UUID。
- 工具: nRF Connect。
cloud-architect:
- 交接: 嵌入式工程师实现 OTA Agent → 云架构师实现更新服务端(S3/签名 URL)。
- 协作: 安全令牌格式(JWT/X.509)。
- 工具: AWS IoT Jobs。
评论
支持 Markdown