嵌入式不是写代码,是写脚本让代码自己跑
嵌入式开发的“偷懒”艺术,本质是 “让机器替你写代码、测代码、烧代码、盯代码”。我们从 工具链、自动化脚本、调试技巧、中间件 四个维度,打造可直接拷贝的“偷懒”组合拳,目标是:一行业务代码对应 10 行自动化。
嵌入式开发的“偷懒”艺术,本质是 “让机器替你写代码、测代码、烧代码、盯代码”。我们从 工具链、自动化脚本、调试技巧、中间件 四个维度,打造可直接拷贝的“偷懒”组合拳,目标是:一行业务代码对应 10 行自动化。

一、工具链:把 IDE 变成“代码生成器 + CI/CD”
|
工具 |
偷懒点 |
一行配置示例 |
|---|---|---|
|
PlatformIO |
统一 500+ 板子,自动依赖、编译、上传 |
platformio run -t upload |
|
CMake + Ninja |
跨平台、增量编译快 3x |
cmake -G Ninja .. |
|
VSCode + Cortex-Debug |
图形化 SWD 调试,断点即点 |
launch.json 中 servertype: "jlink" |
|
Docker |
编译环境 0 配置,docker run 即用 |
docker run -v $(pwd):/src platformio |
偷懒脚本:pio.shbash
#!/bin/bash
# 一键编译+上传+monitor
pio run -t upload && pio device monitor -b 115200
放项目根目录,./pio.sh 完事。
二、自动化脚本:让 Makefile 替你敲 100 行命令1. 自动生成 version.hmakefile
VERSION := $(shell git describe --tags --always --dirty)
src/version.h: .git/HEAD
@echo '#define FW_VERSION "$(VERSION)"' > $@
每次 git commit,固件版本自动更新,OTA 升级不迷路。2. 自动烧录 + 重启 + log 抓取makefile
flash: build
openocd -f interface/jlink.cfg -f target/stm32f4x.cfg \
-c "program build/firmware.elf verify reset exit"
screen -S mcu /dev/ttyACM0 115200
make flash 一键搞定。3. 自动跑单元测试(Ceedling)makefile
test:
ceedling test:all
配合 GitHub Actions,PR 自动跑 200+ 单元测试。
三、开发板调试技巧:从“printf 地狱”到“零侵入观测”
|
技巧 |
偷懒指数 |
实现 |
|---|---|---|
|
RTT (Segger) |
★★★★★ |
SEGGER_RTT_Write(0, buf, len); 实时打印,不占 UART |
|
SWO + ITM |
★★★★ |
ITM_SendString("temp=%.2f\r\n", temp); |
|
Black Magic Probe |
★★★★★ |
gdb 直连,monitor swdp_scan |
|
pyOCD + GDB Dashboard |
★★★★ |
.gdbinit 里加载 dashboard,寄存器一目了然 |
终极偷懒:GDB + TUI + RTTgdb
(gdb) target extended-remote :3333
(gdb) monitor swdp_scan
(gdb) attach 1
(gdb) dashboard -layout source registers memory
(gdb) rtt setup 0x20000000 1024 "RTT"
(gdb) rtt start
打开 VSCode 终端,代码 + 寄存器 + RTT log 三窗并列,调试如丝般顺滑。
四、中间件:少写 1000 行,稳如老狗
|
中间件 |
偷懒场景 |
推荐配置 |
|---|---|---|
|
FreeRTOS + CMSIS-OS2 |
任务、队列、信号量 |
osThreadNew(start_task, NULL, &attr); |
|
lwIP |
网络栈 |
netconn_api 写 HTTP 服务器 50 行 |
|
Mbed TLS |
TLS/SSL |
mbedtls_ssl_config_defaults 一键配置 |
|
FatFS |
SD 卡 |
f_mount/f_open/f_read 三行读文件 |
|
Zephyr RTOS |
驱动全、家用级 |
device_get_binding("GPIO_0") |
偷懒案例:用 Zephyr 写 BLE 温湿度广播(< 50 行)c
#include <zephyr.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/gatt.h>
static uint8_t temp = 25;
BT_GATT_SERVICE_DEF(temp_svc,
BT_GATT_PRIMARY_SERVICE(BT_UUID_TEMPERATURE),
BT_GATT_CHARACTERISTIC(BT_UUID_TEMPERATURE, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_temp, NULL, &temp),
);
static uint8_t read_temp(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) {
return bt_gatt_attr_read(conn, attr, buf, len, offset, &temp, sizeof(temp));
}
void main(void) {
bt_enable(NULL);
bt_le_adv_start(BT_LE_ADV_NCONN, NULL, 0, NULL, 0);
}
编译:west build -b nrf52840dongle → west flash
五、终极“偷懒”工作流(可复制)mermaid
graph TD
A[Git Commit] --> B[GitHub Actions]
B --> C[PlatformIO 编译]
C --> D[Ceedling 单元测试]
D --> E[自动生成 version.h]
E --> F[OpenOCD 烧录]
F --> G[RTT 实时日志]
G --> H[Slack 通知: "固件 v1.2.3 已上线"]
.github/workflows/ci.yml 片段yaml
- name: Build & Flash
run: |
pio run
openocd -f interface/jlink.cfg -f target/stm32f4x.cfg -c "program .pio/build/*/firmware.elf verify reset exit"
公式:偷懒公式
效率 = (自动化脚本行数 + 中间件调用) / 手写业务代码行数
目标:> 10
你写 1 行 sensor_read(),
脚本替你测 100 种边界、烧 10 块板、抓 1000 条 log、推 1 条 Slack。
更多推荐
所有评论(0)