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


Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐