CSDN专栏:
- 嵌入式程序开发实战
- 嵌入式双范式AI编程
- 嵌入式开发必掌握
- 嵌入式求职面试技术资料
第10讲:嵌入式AI开发人机分工——人定硬件逻辑,AI做代码实现
一、为什么需要明确人机分工
嵌入式AI开发中,最危险的误区是"完全交给AI"。明确人机分工,是确保AI辅助正确、代码质量可控的前提。
1.1 完全交给AI的后果
后果一:硬件逻辑错误
AI生成的代码:
- 不理解硬件特性(时序、电气特性)
- 不理解硬件约束(资源限制、环境条件)
- 不理解硬件风险(干扰、失效模式)
示例:
- AI生成的I2C代码没有考虑总线恢复时间
- AI生成的中断代码没有考虑中断嵌套
- AI生成的电源代码没有考虑上电顺序
后果二:架构混乱
AI生成的代码:
- 没有整体架构设计
- 各模块耦合混乱
- 代码风格不一致
- 难以维护和扩展
示例:
- AI生成的多个驱动相互依赖
- AI生成的代码命名混乱
- AI生成的代码注释缺失
后果三:安全隐患
AI生成的代码:
- 没有容错处理
- 没有异常处理
- 没有安全检查
示例:
- AI生成的电机控制代码没有过流保护
- AI生成的通信代码没有超时处理
- AI生成的传感器代码没有断线检测
1.2 正确的人机关系
人是主导:
人负责:
- 硬件逻辑设计(时序、电气、环境)
- 架构设计(模块划分、接口定义)
- 安全设计(容错、异常、保护)
- 质量把控(审查、测试、验证)
AI是辅助:
AI负责:
- 代码实现(根据人的设计)
- 代码生成(重复性工作)
- 代码优化(性能优化)
- 文档生成(辅助文档)
核心原则:
- 人定方向,AI做执行
- 人定约束,AI做实现
- 人定质量,AI做效率
二、人负责的核心工作
2.1 硬件逻辑设计
硬件逻辑包括:
时序逻辑:
人需要确定:
- I2C时序:Start建立时间、Stop建立时间、数据保持时间
- SPI时序:时钟极性、时钟相位、片选建立/保持时间
- UART时序:波特率、数据位、停止位、校验位
- ADC时序:采样时间、转换时间
- PWM时序:周期、占空比、死区时间
示例:
- 人确定:I2C速率100kHz,Start建立时间≥4.7us
- AI实现:根据人的约束生成I2C初始化代码
电气逻辑:
人需要确定:
- 电压范围:工作电压、容差范围
- 电流限制:最大电流、过流保护阈值
- 功耗要求:工作功耗、休眠功耗
- 驱动能力:引脚驱动能力、负载匹配
示例:
- 人确定:GPIO输出电流最大8mA,负载需要10mA,需要增加驱动电路
- AI实现:根据人的约束生成GPIO配置代码
环境逻辑:
人需要确定:
- 温度范围:工作温度、存储温度
- 湿度范围:工作湿度、防护等级
- 振动要求:振动频率、振动幅度
- EMC要求:抗干扰等级、辐射限制
示例:
- 人确定:设备工作温度-40°C ~ +85°C,需要工业级芯片
- AI实现:根据人的约束选择合适的芯片型号
2.2 架构设计
架构设计包括:
模块划分:
人需要确定:
- 功能模块:传感器模块、通信模块、控制模块、显示模块
- 驱动模块:GPIO驱动、UART驱动、SPI驱动、I2C驱动
- 中间层:协议层、应用层、接口层
示例:
- 人确定:系统分为传感器采集、数据处理、通信发送三个模块
- AI实现:根据人的架构生成各模块代码框架
接口定义:
人需要确定:
- 模块间接口:函数接口、数据接口、事件接口
- 驱动接口:初始化接口、操作接口、状态接口
- 硬件接口:引脚定义、信号定义、时序定义
示例:
- 人确定:传感器模块接口:Init()、Read()、Process()
- AI实现:根据人的接口定义生成函数框架
数据流设计:
人需要确定:
- 数据流向:传感器 → 处理 → 通信 → 显示
- 数据格式:原始数据、处理数据、协议数据
- 数据存储:RAM、Flash、外部存储
示例:
- 人确定:传感器数据经过滤波、校准后发送
- AI实现:根据人的数据流生成处理代码
2.3 安全设计
安全设计包括:
容错设计:
人需要确定:
- 通信容错:超时重传、CRC校验、帧序号
- 传感器容错:断线检测、量程检查、滤波去抖
- 执行器容错:过流保护、过热保护、堵转检测
- 系统容错:看门狗、异常复位、状态恢复
示例:
- 人确定:I2C通信失败重试3次,仍失败则报告故障
- AI实现:根据人的容错设计生成重试代码
异常处理:
人需要确定:
- 硬件异常:断线、短路、过流、过热
- 通信异常:超时、错误、丢失
- 数据异常:越界、错误、丢失
- 系统异常:死锁、溢出、崩溃
示例:
- 人确定:传感器断线时输出安全值,记录故障日志
- AI实现:根据人的异常处理生成故障处理代码
保护措施:
人需要确定:
- 硬件保护:过流保护、过压保护、过热保护
- 软件保护:看门狗、堆栈检测、内存保护
- 数据保护:备份、校验、加密
- 系统保护:安全状态、故障导向安全
示例:
- 人确定:电机过流时立即停止,进入安全状态
- AI实现:根据人的保护措施生成保护代码
2.4 质量把控
质量把控包括:
代码审查:
人需要审查:
- 逻辑正确性:代码是否实现设计意图
- 规范符合性:代码是否符合编码规范
- 安全正确性:容错、异常、保护是否完整
- 性能合理性:时序、资源、功耗是否满足
示例:
- 人审查:AI生成的I2C代码是否有总线恢复时间
- AI无法替代:人的审查判断
测试验证:
人需要验证:
- 功能测试:功能是否正确实现
- 边界测试:边界条件是否处理
- 异常测试:异常情况是否处理
- 性能测试:性能指标是否满足
示例:
- 人验证:I2C通信在快速连续读取时是否正常
- AI无法替代:人的测试判断
问题修复:
人需要分析:
- 问题定位:问题发生在哪里
- 问题原因:问题为什么发生
- 修复方案:如何修复问题
- 验证修复:修复是否有效
示例:
- 人分析:I2C通信失败是因为时序违规,修复方案是增加延时
- AI实现:根据人的修复方案修改代码
三、AI负责的核心工作
3.1 代码实现
AI擅长的代码实现:
驱动代码生成:
人提供:
- 硬件参数(引脚、时钟、时序)
- 功能需求(初始化、读写、配置)
AI生成:
- 寄存器配置代码
- 初始化函数
- 操作函数
示例:
- 人:PA9/PA10配置为USART1,波特率115200
- AI:生成USART1初始化代码
协议代码生成:
人提供:
- 协议格式(帧结构、字段定义)
- 处理逻辑(解析、打包、校验)
AI生成:
- 协议解析代码
- 协议打包代码
- 校验计算代码
示例:
- 人:Modbus RTU帧格式,CRC-16校验
- AI:生成Modbus帧解析和打包代码
算法代码生成:
人提供:
- 算法原理(公式、逻辑)
- 实现要求(精度、性能)
AI生成:
- 算法实现代码
- 优化代码
示例:
- 人:PID控制算法,Kp=1.0, Ki=0.1, Kd=0.01
- AI:生成PID控制代码
3.2 代码生成
AI擅长的代码生成:
配置代码生成:
人提供:
- 配置参数(时钟、GPIO、外设)
AI生成:
- 配置结构体
- 配置函数
示例:
- 人:系统时钟72MHz,HSE 8MHz
- AI:生成时钟配置代码
模板代码生成:
人提供:
- 模板结构(函数框架、注释格式)
AI生成:
- 完整函数代码
- 注释文档
示例:
- 人:函数模板:函数名、参数、返回值、功能描述
- AI:生成完整函数代码和注释
重复代码生成:
人提供:
- 重复模式(相似功能的代码模式)
AI生成:
- 批量生成相似代码
示例:
- 人:8路ADC采集,每路配置相同
- AI:生成8路ADC采集代码
3.3 代码优化
AI擅长的代码优化:
性能优化:
人提供:
- 性能瓶颈(耗时函数、频繁调用)
AI优化:
- 算法优化
- 代码重构
示例:
- 人:滤波函数耗时过长
- AI:优化滤波算法,使用查表法
资源优化:
人提供:
- 资源限制(RAM、Flash、堆栈)
AI优化:
- 内存优化
- 代码压缩
示例:
- 人:RAM不足,需要优化内存使用
- AI:使用静态数组替代动态分配,减少局部变量
代码简化:
人提供:
- 冗余代码(重复逻辑、冗余判断)
AI简化:
- 代码合并
- 逻辑简化
示例:
- 人:多处重复的错误处理代码
- AI:提取公共函数,简化代码
3.4 文档生成
AI擅长的文档生成:
代码注释生成:
人提供:
- 代码功能描述
AI生成:
- 函数注释块
- 参数说明
- 返回值说明
示例:
- 人:函数功能是读取传感器数据
- AI:生成完整的函数注释
设计文档生成:
人提供:
- 设计思路、架构描述
AI生成:
- 设计文档
- 架构图描述
示例:
- 人:系统分为三个模块,数据流向是…
- AI:生成设计文档
测试文档生成:
人提供:
- 测试用例、测试结果
AI生成:
- 测试报告
- 测试文档
示例:
- 人:测试用例和结果
- AI:生成测试报告
四、人机协作工作流
4.1 标准工作流
步骤一:人进行需求分析
人:
- 分析功能需求
- 分析性能需求
- 分析安全需求
- 分析约束条件
输出:需求文档(自然语言)
步骤二:人进行设计
人:
- 设计硬件逻辑(时序、电气、环境)
- 设计系统架构(模块、接口、数据流)
- 设计安全机制(容错、异常、保护)
输出:设计文档(Spec)
步骤三:AI生成代码
AI:
- 根据人的设计生成代码框架
- 根据人的约束生成驱动代码
- 根据人的接口生成函数代码
输入:人的设计文档(Spec)
输出:代码框架、驱动代码、函数代码
步骤四:人审查代码
人:
- 审查逻辑正确性
- 审查规范符合性
- 审查安全正确性
- 修改不符合要求的代码
输入:AI生成的代码
输出:审查通过的代码
步骤五:人测试验证
人:
- 执行功能测试
- 执行边界测试
- 执行异常测试
- 执行性能测试
输入:审查通过的代码
输出:测试报告
步骤六:人修复问题
人:
- 分析问题原因
- 制定修复方案
AI:
- 根据人的方案修改代码
输入:测试报告
输出:修复后的代码
步骤七:迭代直到通过
重复步骤四-六,直到所有测试通过
4.2 典型案例:温度控制系统
步骤一:人进行需求分析
人分析:
功能需求:
- 读取温度传感器(PT100)
- 根据温度控制加热器
- 显示当前温度和设定温度
- 通过串口上报温度数据
性能需求:
- 温度采集周期:1秒
- 控制响应时间:<100ms
- 显示刷新周期:500ms
安全需求:
- 温度超限报警(>100°C)
- 加热器过流保护
- 传感器断线检测
约束条件:
- MCU:STM32F103
- 温度范围:-50°C ~ +150°C
- 加热器功率:500W
步骤二:人进行设计
人设计:
硬件逻辑:
- PT100使用SPI接口,采样周期1秒
- 加热器使用PWM控制,频率1kHz
- 显示使用I2C接口,刷新周期500ms
- 串口波特率115200
系统架构:
- 传感器模块:PT100_Init()、PT100_Read()
- 控制模块:Control_Init()、Control_Process()
- 显示模块:Display_Init()、Display_Update()
- 通信模块:Comm_Init()、Comm_Send()
安全机制:
- 温度超限:停止加热,报警
- 过流保护:检测电流,超限停止
- 断线检测:检测PT100连接状态
步骤三:AI生成代码
Prompt:
"根据以下设计生成代码: - STM32F103,使用HAL库 - PT100通过SPI1读取,采样周期1秒 - 加热器通过TIM3 PWM控制,频率1kHz - 显示通过I2C1,刷新周期500ms - 串口USART1,波特率115200 - 温度超限>100°C时停止加热并报警 - 检测PT100断线,断线时报告故障"AI生成:
- PT100驱动代码
- PWM控制代码
- 显示驱动代码
- 串口通信代码
- 主控制逻辑代码
步骤四:人审查代码
人审查:
- PT100驱动:时序是否正确?断线检测是否实现?
- PWM控制:频率是否正确?过流保护是否实现?
- 显示驱动:I2C时序是否正确?
- 串口通信:波特率是否正确?超时处理是否实现?
- 主控制逻辑:温度超限处理是否正确?
发现问题:
- PT100驱动缺少断线检测代码
- PWM控制缺少过流保护代码
人修改:
- 添加PT100断线检测代码
- 添加PWM过流保护代码
步骤五:人测试验证
人测试:
- 功能测试:温度读取、加热控制、显示、通信
- 边界测试:温度-50°C、+150°C、超限100°C
- 异常测试:PT100断线、加热器过流、串口断开
- 性能测试:采集周期、控制响应、显示刷新
发现问题:
- 温度采集周期不稳定(有时800ms,有时1200ms)
人分析:
- 原因:主循环中多个任务串行执行,耗时不确定
- 修复:使用定时器中断控制采集周期
步骤六:人修复问题
人制定修复方案:
- 使用TIM2定时器中断,周期1秒
- 中断中设置标志,主循环检测标志执行采集
Prompt:
“修改代码,使用TIM2定时器中断控制温度采集周期,周期精确1秒”
AI修改:
- 添加TIM2定时器配置
- 修改主循环逻辑,使用中断标志
步骤七:迭代直到通过
重复审查、测试、修复,直到所有测试通过
五、人机分工边界清单
5.1 人必须做的
- 需求分析(功能、性能、安全、约束)
- 硬件逻辑设计(时序、电气、环境)
- 系统架构设计(模块、接口、数据流)
- 安全机制设计(容错、异常、保护)
- 代码审查(逻辑、规范、安全)
- 测试验证(功能、边界、异常、性能)
- 问题分析(定位、原因、方案)
- 质量把控(最终决策)
5.2 AI可以做的
- 代码实现(根据人的设计)
- 代码生成(驱动、协议、算法)
- 代码优化(性能、资源、简化)
- 文档生成(注释、设计文档、测试文档)
- 代码修改(根据人的方案)
5.3 AI不能做的
- 需求分析(不理解业务)
- 硬件逻辑设计(不理解硬件)
- 架构设计(没有全局观)
- 安全设计(不理解风险)
- 质量决策(不能承担责任)
- 替代人的判断
六、本讲核心要点
6.1 记住这三句话
完全交给AI是危险的:AI不理解硬件、架构、安全,必须由人主导
人负责设计、审查、测试、决策;AI负责实现、生成、优化、辅助
人机协作的正确姿势:人定方向和约束,AI做执行和实现,人审查和验证
6.2 实践建议
对于新手:
- 学习硬件知识,理解时序、电气、环境
- 学习架构设计,理解模块、接口、数据流
- 学习安全设计,理解容错、异常、保护
- 对AI生成的代码进行审查,不要盲目信任
对于有经验工程师:
- 建立人机协作工作流
- 编写Spec约束AI生成
- 严格审查AI生成的代码
- 建立代码审查清单
对于团队负责人:
- 明确人机分工边界
- 培训团队硬件知识和安全意识
- 建立代码审查流程
- 建立质量把控机制
6.3 下讲预告
第11讲将对比分析:嵌入式传统开发 VS AI双范式开发:效率与稳定性对比
传统开发和AI双范式开发有什么区别?效率如何?稳定性如何?下一讲将通过对比分析,展示AI双范式开发的优势和适用场景。