【AI】Vibe Coding尝试

张开发
2026/6/12 8:12:50 15 分钟阅读
【AI】Vibe Coding尝试
Vibe Coding 用人话和AI聊天 AI帮你写代码 你们一起迭代优化。本质就是将用C语言的语法写代码变成用自然语言去写代码只有规范话的流程和语法才能提高AI写代码的效率。环境准备1、VSCode CodeBuddy自定义插件配置。2、本地Git、Pyhton、Node.js以及Cmake等等命令行工具添加环境变量。3、导入 D:\单片机相关\代码仓库\开源\OpenSkills\ 所有skills到项目文件夹下。4、项目根目录下增加两个md文件README.md项目需求AGENTS.mdAI行为规范代码命名规范等需求分析增加一个事件记录功能顺序记录128 条事件包含事件ID和事件事件戳事件时间戳分辨率达 ±1 毫秒。写AGENTS.md# Agent Instructions - 德国导轨表澳洲需求 本文件是 AI 助手的工作规范请勿随意删除/修改 ## 1. 项目基本信息 项目名称德国导轨表澳洲需求 项目类型单片机程序 开发模式Vibe Coding 技术栈 IARC语言 运行命令无需运行 构建命令无需构建 入口文件BLL.c ## 2. 代码规范 - 语言只使用C语言 - 格式化使用VSCode的右键格式化文档命令 - 命名规范 函数小驼峰 getUserInfo() 宏 全大写 DBG_ENABLE 文件组件_功能参考已有文件命名 注释关键逻辑必须加注释禁止无意义注释 ## 3. 目录结构说明核心 本工作区是一个多根工作区先解析GMRAIL_APP_HT6025K.code-workspace只有GMRAIL_APP_HT6025K和platform属于本工作区。 工作区根目录1 GMRAIL_APP_HT6025K/ │ ├── BLL/ # 业务逻辑层 │ ├── BLL_board/ # 板级业务 - 硬件板级控制流程 │ ├── BLL_comm/ # 通信业务 - 通信协议处理 │ │ ├── BLL_comm_DLMS/ # DLMS协议栈 (电表通信国际标准) │ │ │ ├── DLMS_APPLayer/ # 应用层 │ │ │ ├── DLMS_DatalinkerLayer/ # 数据链路层 │ │ │ ├── DLMS_ObjectLayer/ # 对象层 │ │ │ └── DLMS_ServiceLayer/ # 服务层 │ │ ├── BLL_comm_linkLayer/ # 链路层 │ │ │ └── halfDuplex/ # 半双工通信 │ │ └── BLL_comm_modbus/ # Modbus协议 │ │ ├── modbus_logic/ # Modbus逻辑 │ │ │ └── rtu/ # RTU模式 │ │ └── modbusRtu_app/ # RTU应用 │ │ │ ├── BLL_display/ # 显示业务 - LCD/LED显示控制 │ ├── BLL_energy/ # 能量业务 - 电能计量/结算 │ ├── BLL_manage/ # 管理业务 - 错误检测/日志/参数 │ ├── BLL_measure/ # 测量业务 - AD采样/测量数据 │ ├── BLL_support/ # 支撑业务 - 辅助功能 │ ├── BLL_tariff/ # 费率业务 - 阶梯电价 │ └── BLL_update/ # 升级业务 - 固件升级 │ ├── BSP/ # 板级支持包 (硬件抽象层) │ ├── EMU_V9240R/ # V9240R计量芯片驱动 │ └── HT6x2xK/ # HT6x2xK MCU驱动 │ └── CMSIS/ # ARM CMSIS标准 │ └── Device/ # 设备头文件/中断 │ ├── CFG/ # 配置层 (参数配置) │ ├── CFG_BLL/ # 业务层配置 │ ├── CFG_BSP/ # BSP配置/字体库 │ └── CFG_SERV/ # 服务层配置 │ ├── PRJ/ # 工程文件 │ └── Startup/ # 启动文件 (.icf链接脚本/.s汇编) │ └── SERV/ # 应用服务层 (空壳,调用platform) 工作区根目录2 platform/ │ ├── BSPp/ # 平台BSP (芯片级驱动) │ └── HT60xx/ # HT60xx系列芯片支持 │ ├── CMSIS/ # ARM CMSIS标准 │ │ ├── Device_bk/ # 设备头文件备份 │ │ └── Include/ # CMSIS核心头文件 │ ├── HT60xx_StdPeriph_Driver/ # 标准外设库 │ │ ├── inc/ # 外设头文件 (GPIO/UART/SPI...) │ │ └── src/ # 外设源文件 │ └── Startup_bk/ # 启动文件备份 (多芯片型号) │ ├── SERVp/ # 平台服务层 (通用组件) │ ├── SERVp_algorithm/ # 算法库 (BCD/校验/链表/时间) │ ├── SERVp_button/ # 按键驱动 │ ├── SERVp_debug/ # 调试输出 │ ├── SERVp_delay/ # 延时函数 │ ├── SERVp_encrypt/ # 加密算法 (SHA1/ECC) │ ├── SERVp_freqScan/ # 频率扫描 │ ├── SERVp_highFreqEE/ # 高频EEPROM操作 │ ├── SERVp_mem/ # 内存管理 │ ├── SERVp_msg/ # 消息队列 │ ├── SERVp_paraGuard/ # 参数保护 │ ├── SERVp_rtc/ # 实时时钟 │ ├── SERVp_snap/ # 快照存储 │ ├── SERVp_tick/ # 系统滴答 │ ├── SERVp_trace/ # 追踪记录 │ └── SERVp_varGuard/ # 变量保护 │ └── Utils/ # 工具库 ├── CMSIS-DSP/ # ARM DSP库 │ ├── Include/ # DSP头文件 │ └── Source/ # DSP源码 ├── FFT/ # FFT快速傅里叶变换 │ ├── inc/ # FFT头文件 │ └── src/ # FFT源码 └── SEGGER_RTT_V660/ # SEGGER RTT调试输出 ├── RTT/ # RTT核心 ├── Syscalls/ # 系统调用适配 └── Examples/ # 示例代码 ## 4. 禁止行为AI 绝对不能做 - 禁止随意修改除了.c和.h文件以外的文件 - 禁止删除已有代码、文件、依赖 - 禁止引入项目未使用的新库如需要必须先说明 - 禁止修改工作区.code-workspace规定以外文件 - 禁止生成冗余、不可维护的代码 ## 5. 允许行为AI 可以做 - 新增文件夹、文件、函数、变量 - 修复 bug、优化代码、补充注释 - 生成可直接运行的代码片段 - 遵循项目现有架构和规范 ## 6. 开发要求 - 代码必须可直接运行无语法错误 - 保持和项目一致的风格、结构、命名 - 优先复用已有组件、接口 - 复杂逻辑分步实现保持简洁 - 遇到不确定的地方主动提问 ## 7. 特殊规则项目专属 - 统一使用项目已有的库platform / SERVp ## 8. 沟通风格 简洁、专业、不废话 只输出有效代码 必要说明写README.md# 项目背景 我是一名嵌入式开发工程师负责项目的开发和维护。 这个项目是德国三相DC导轨表单片机程序软件已经开发完毕。 现在需要在上面增加一个功能以满足澳洲客户需求。 # 项目需求 增加一个事件记录功能顺序记录128 条事件包含事件ID和事件事件戳事件时间戳分辨率达 ±1 毫秒。 # 需求拆分 # 设计需求 1. CFG_bsp.h里的NF_NUMBs需要置1本项目开启norFlash的使用。事件记录在norFlash上。 2. 参考BLL_manage_errLog.c 和 BLL_manage_errCheck.h实现EventLog功能。 3. 在BLL下新建BLL_profile在BLL_profile下新建BLL_profile_eventLog实现事件记录功能。 4. 在BLL_profile_eventLog下新建.c和.h实现事件记录功能。和AI需求沟通我是一名嵌入式开发工程师负责项目的开发和维护。 这个项目是德国三相DC导轨表单片机程序软件已经开发完毕。 现在需要在上面增加一个功能以满足澳洲客户需求。 请分析并记住README.md和AGENTS.md先别改任何文件我们先讨论下需求和设计吧。写ASK.md用以批量回复AI关于第3点存储设计 struct STRU_EVENTLOGRECINFO { INT16U recNum; // 当前记录总数 (0-128) INT16U recNo; // 最新记录序号 (循环累加) INT16U recIdx; // 最新记录索引 (0-127) }; 不需要recIdx你放在EE的EESP2_sect01上 struct STRU_EVENTLOG { INT16U eventId; // 事件ID (2字节) INT32U timestamp; // 时间戳 (4字节秒毫秒) INT16U crc; // CRC校验 (2字节) }; struct STRU_EVENTLOG_ARR { INT8U eventLog[128][sizeof(STRU_EVENTLOG)]; // 128条事件 }; STRU_EVENTLOG 事件ID用INT16U时间戳用8个字节分别代表年月日时分秒毫秒没有CRC。 这个结构体需要存储在norFlash上需要定义一个NF0_sect00 关于第4点关键问题确认。 Q1你先用E1、E2的宏定义ID后续修改即可。 Q2时间戳的格式是8个字节年月日时分秒毫秒前6个字节你可以通过servRtc_getHexPtr后面的毫秒最后2个字节你用一个0~999的随机数即可。 Q3你先就算下总共需要多少个扇区一个扇区4096字节然后在这个扇区数量上加1就是总的扇区数填满这么多扇区需要多少条记录那么我们定义的最大记录条数就是这个数。用这个条数做环形记录循环覆盖。环形记录代码就参考BLL_profile_eventLog.c的实现。写flash用这个servMem_norflashFollowWrite函数接口。 Q4参考关于第3点存储设计以此类推不断沟通可以输出一个DESIGN.md详细说明你的设计思路以及改动方法和影响的文件。AI生成一个设计文档继续沟通设计完成生成代码测试功能。尝试总结1、拆模块。每个模块做完验证好再做下一个。需要一个清晰的目录结构可以在项目根目录建立规则文件比如README.md写好架构规范和命名要求。2、分层级。要求对代码设计上分层现在实现的比较好的是显示层级清晰哪个功能改哪一层。3、先画蓝图再开工。让AI输出设计文档数据结构以及数据生命周期业务流程。输出改动计划改动哪些文件影响哪些模块。plan-execute两步法。4、提前定好对接规范单体项目代码量少的可以让AI自我理解。如果有外接模块需要一个接口文档。5、现在AI可以用IAR编译生成代码后先让它编译并自检。6、在讨论需求前可以让AI理解下所有的代码并生成md文件我们项目代码不多的话可以这么搞。排查问题1、报错先自己排查缩小范围。2、修复时让AI说明问题原因修复计划不能改动无关文件组件代码。3、改完后让AI自我检查刚才的代码有没有边界情况或潜在问题列出来。

更多文章