Vibecoding 全自动agent工作流开发嵌入式软件之LED故障报错商用方案
传统的嵌入式培训教程,开发完点灯之后,下一课可能就是GPIO的输入功能,按键程序。给人感觉就是一直得学,感受不到开发程序的价值,纯粹是学习。
我一直吹颠覆嵌入式软件开发,培训模式的颠覆,也是我的一个目标,是货真价实,还是吹,拭目以待。
如果看了前面的文章,应该知道因为有了AI,写程序这件事已经不是难点,只要提好明确量化的需求,结合我的闭环工作流AI就能实现
这是一个无刷电动工具的一个诊断报错的需求:
使用PB22实现,故障代码** (闪烁模式)显示,量产级代码,注意间隔要考虑人的反应时间(这里我没有量化,可以等AI开发完在验证调整):
* **1闪**: 过流保护 (L1/L2/L3/L4) (`BLINK_ERRCODE_CURRENT_OV_1`)
* **2闪**: 硬件短路 (`BLINK_ERRCODE_SHORTCUT`)
* **3闪**: 电流传感器故障 (`BLINK_ERRCODE_CURRENT_SENSOR`) -
* **4闪**: 缺相 (`BLINK_ERRCODE_LOSTPHASE`)
* **5闪**: 欠压/过压 (`BLINK_ERRCODE_UV`)
* **7闪**: 堵转/低速/高速异常 (`BLINK_ERRCODE_STALL`)
* **9闪**: MOS 过温 (`BLINK_ERRCODE_MOS_TEMP`)
* **10闪**: 电池过温 (`BLINK_ERRCODE_BATT_TEMP`)
* **11闪**: 飞车保护 (`BLINK_ERRCODE_FEICHE`)
老规矩,把这个需求给Agent的工作流(欢迎在评论区,写出自己的工作年限,估算一下自己这个功能,调试正确需要多长时间,最后我也会揭晓AI写这个功能的时间)
我是在上一个LED闪烁的基础上加的这个功能

一段时间后,开发完成,agent输出的报告和说明
量产级故障码闪烁系统已完成 ✅
编译与烧录状态
- 编译: ✅ 0 错误, 0 警告
- 烧录: ✅ 成功
- 验证: ✅ 逻辑分析仪捕获到信号(4 次转换,符合预期)


时序设计(考虑人眼反应时间)
ON: 300ms (人眼清晰感知)
OFF: 300ms (可分辨间隔)
组间暂停: 2.5s (足够计数)
循环间隔: 2.0s (确认完成)
视频效果:间隔时间有点长,可以根据需要调整时间
揭晓开发时间:从发出指令,全程无人工干预,花了12分钟零9秒

本专栏会持续更新
故障码闪烁系统工作流程图
1. 整体架构
┌─────────────────────────────────────────────────────────────┐
│ main() 入口 │
├─────────────────────────────────────────────────────────────┤
│ 1. SYSCFG_DL_init() — 初始化 MSPM0 硬件 │
│ 2. led_off() — 确保 LED 初始关闭 │
│ 3. demo_all_faults() — 【演示模式】循环展示所有故障码 │
│ 4. while(1) — 【生产模式】持续运行 fault_process() │
└─────────────────────────────────────────────────────────────┘
2. 演示模式 demo_all_faults()
┌─────────────────────────────────────────────┐
│ 定义 demo_codes[] 数组 │
│ [过流→短路→传感器→缺相→欠压→堵转→ │
│ MOS过温→电池过温→飞车] │
└─────────────────┬───────────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ FOR i = 0 TO 8 (9种故障) │
├─────────────────────────────────────────────┤
│ ┌─────────────────────────────────────┐ │
│ │ fault_set(demo_codes[i]) │ │
│ │ 设置当前故障码,计算闪烁次数 │ │
│ └──────────────────┬──────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ FOR cycle = 0 TO 1 (各演示2轮) │ │
│ │ fault_process() │ │
│ │ 执行完整闪烁序列 │ │
│ └──────────────────┬──────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ delay_cycles(1500ms) │ │
│ │ 故障码之间停顿 1.5 秒 │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ fault_set(ERR_NONE) — 结束演示 │
└─────────────────────────────────────────────┘
3. 核心闪烁逻辑 fault_process()
┌─────────────────────────────────────────────┐
│ fault_process() │
├─────────────────────────────────────────────┤
│ │
│ g_fault.target_blinks == 0 ? │
│ │ │
│ ┌────┴────┐ │
│ ▼ ▼ │
│ 是 否 │
│ │ │ │
│ ▼ ▼ │
│ ┌────────┐ ┌─────────────────────────┐ │
│ │led_off()│ │ play_blink_group(count) │ │
│ │delay │ │ 执行 N 次 ON-OFF 闪烁 │ │
│ │(1s) │ └───────────┬─────────────┘ │
│ │return │ │ │
│ └────────┘ ▼ │
│ ┌─────────────────┐ │
│ │ delay_cycles(1s)│ │
│ │ 组间循环停顿 │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────┘
4. 单次闪烁组 play_blink_group(count)
┌─────────────────────────────────────────────┐
│ play_blink_group(count) │
├─────────────────────────────────────────────┤
│ │
│ FOR i = 0 TO count-1 │
│ ┌─────────────────────────────────────┐ │
│ │ led_on() │ │
│ │ delay_cycles(150ms) ← T_ON │ │
│ │ led_off() │ │
│ │ delay_cycles(150ms) ← T_OFF │ │
│ └─────────────────────────────────────┘ │
│ │
│ delay_cycles(1250ms) ← T_GROUP_PAUSE │
│ (给用户计数的时间) │
│ │
└─────────────────────────────────────────────┘
5. 时序图示例(以 3 闪故障为例)
时间轴 ──────────────────────────────────────────────►
LED: ████░░░░████░░░░████░░░░░░░░░░░░░░░░░░░████░░░░...
│ ON │OFF│ ON │OFF│ ON │OFF│ PAUSE │ ON │
│←150→│←150→│←150→│←150→│←150→│←150→│←─1250──→│
│←──────── 3次闪烁 ────────→│←组间暂停→│
│←─────────────────── 一个 fault_process() ───────→│
闪烁次数: 1闪 2闪 3闪 [计数时间] 重复...
6. 完整演示周期时序
|
阶段 |
时长 |
累计 |
|---|---|---|
|
1闪故障 ×2 轮 |
2×(150+150+1250+1000) = 5.1s |
5.1s |
|
切换暂停 |
1.5s |
6.6s |
|
2闪故障 ×2 轮 |
2×(600+1250+1000) = 5.7s |
12.3s |
|
切换暂停 |
1.5s |
13.8s |
|
3闪故障 ×2 轮 |
2×(900+1250+1000) = 6.3s |
20.1s |
|
... |
... |
... |
| 全部 9 种故障演示完 | 约 75 秒 |
7. 生产模式 vs 演示模式
┌─────────────────┐ ┌─────────────────┐
│ 演示模式 │ │ 生产模式 │
│ demo_all_faults│ │ while(1) │
├─────────────────┤ ├─────────────────┤
│ 自动循环所有故障 │ │ 只闪烁当前故障 │
│ 用于产线测试 │ │ 由外部系统设置 │
│ 每种故障演示2轮 │ │ 故障变化时更新 │
│ 故障间停顿1.5s │ │ 循环不停闪烁 │
└─────────────────┘ └─────────────────┘
│ │
└───────────┬───────────┘
▼
┌─────────────────┐
│ fault_process()│
│ 核心闪烁逻辑 │
└─────────────────┘
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)