第15讲:专栏资源说明——模板、源码、Prompt、工程SOP全集
CSDN专栏嵌入式程序开发实战嵌入式双范式AI编程嵌入式开发必掌握嵌入式求职面试技术资料第15讲专栏资源说明——模板、源码、Prompt、工程SOP全集一、专栏配套资源总览本专栏提供完整的配套资源帮助读者快速上手、高效开发、质量保证。1.1 资源分类资源一Spec模板库内容驱动Spec模板GPIO、UART、SPI、I2C、ADC、PWM协议Spec模板Modbus、自定义协议RTOS Spec模板任务、队列、互斥锁系统Spec模板初始化、异常处理容错Spec模板通信、传感器、执行器作用快速编写Spec统一Spec格式保证Spec完整性资源二源码示例库内容驱动源码示例GPIO、UART、SPI、I2C、ADC、PWM协议源码示例Modbus、自定义协议RTOS源码示例FreeRTOS任务示例系统源码示例初始化、异常处理完整项目示例温湿度采集、电机控制作用学习代码实现参考代码风格快速开发资源三Prompt模板库内容Vibe模式Prompt模板Spec模式Prompt模板增量修改Prompt模板容错设计Prompt模板文档生成Prompt模板作用提高AI生成质量统一Prompt格式快速生成代码资源四工程SOP文档内容Vibe模式工作流SOPSpec模式工作流SOP混合模式工作流SOP代码审查SOP测试验证SOP问题修复SOP作用规范开发流程提高开发效率保证开发质量二、Spec模板库详解2.1 驱动Spec模板GPIO驱动Spec模板## SpecGPIO驱动 ### 1. 需求层 #### 1.1 功能需求 - FR-001配置GPIO引脚为输入/输出/复用模式 - FR-002读取GPIO输入状态 - FR-003设置GPIO输出状态 ### 2. 设计层 #### 2.1 硬件层约束 - HW-001引脚定义 - GPIOA: PA0-PA15 - GPIOB: PB0-PB15 - GPIOC: PC0-PC15 - HW-002模式定义 - 输入模式GPIO_MODE_INPUT - 输出模式GPIO_MODE_OUTPUT_PP/GPIO_MODE_OUTPUT_OD - 复用模式GPIO_MODE_AF_PP/GPIO_MODE_AF_OD - 模拟模式GPIO_MODE_ANALOG #### 2.2 函数契约 - FUNC-001GPIO_Init - 签名int8_t GPIO_Init(uint32_t port, uint16_t pin, uint8_t mode) - 入参约束port有效pin有效mode有效 - 返回值0成功-1失败 - FUNC-002GPIO_Read - 签名int8_t GPIO_Read(uint32_t port, uint16_t pin, uint8_t *state) - 入参约束port有效pin有效state非空 - 出参约束state为0或1 - 返回值0成功-1失败 - FUNC-003GPIO_Write - 签名int8_t GPIO_Write(uint32_t port, uint16_t pin, uint8_t state) - 入参约束port有效pin有效state为0或1 - 返回值0成功-1失败 ### 3. 编码层 #### 3.1 编码规范 - 遵循MISRA C:2012 - 函数命名GPIO_功能名 - 参数检查所有函数检查参数有效性 ### 4. AI生成指令 根据以上Spec生成GPIO驱动代码包含初始化、读取、写入功能UART驱动Spec模板## SpecUART驱动 ### 1. 需求层 #### 1.1 功能需求 - FR-001初始化UART - FR-002发送数据 - FR-003接收数据 - FR-004配置波特率、数据位、停止位、校验位 ### 2. 设计层 #### 2.1 硬件层约束 - HW-001UART实例 - USART1: PA9(TX), PA10(RX) - USART2: PA2(TX), PA3(RX) - USART3: PB10(TX), PB11(RX) - HW-002配置参数 - 波特率9600/19200/38400/57600/115200 - 数据位8位 - 停止位1位 - 校验位无 #### 2.2 数据层约束 - DATA-001发送缓冲区 - 大小256字节 - 类型环形缓冲区 - DATA-002接收缓冲区 - 大小256字节 - 类型环形缓冲区 #### 2.3 函数契约 - FUNC-001UART_Init - 签名int8_t UART_Init(uint8_t uartId, uint32_t baudrate) - 入参约束uartId有效baudrate有效 - 返回值0成功-1失败 - FUNC-002UART_Send - 签名int8_t UART_Send(uint8_t uartId, uint8_t *data, uint16_t len) - 入参约束uartId有效data非空len0 - 返回值0成功-1失败 - FUNC-003UART_Receive - 签名int8_t UART_Receive(uint8_t uartId, uint8_t *data, uint16_t len) - 入参约束uartId有效data非空len0 - 返回值0成功-1失败 #### 2.4 容错边界 - FT-001发送超时 - 超时时间100ms - 超时后返回失败 - FT-002接收超时 - 超时时间100ms - 超时后返回失败 ### 3. 编码层 #### 3.1 编码规范 - 遵循MISRA C:2012 - 函数命名UART_功能名 - 参数检查所有函数检查参数有效性 ### 4. AI生成指令 根据以上Spec生成UART驱动代码包含初始化、发送、接收功能支持超时处理2.2 协议Spec模板Modbus RTU Spec模板## SpecModbus RTU协议 ### 1. 需求层 #### 1.1 功能需求 - FR-001实现Modbus RTU从站功能 - FR-002支持功能码03读保持寄存器 - FR-003支持功能码06写单个寄存器 - FR-004支持功能码16写多个寄存器 ### 2. 设计层 #### 2.1 硬件层约束 - HW-001UART配置 - 数据位8位 - 停止位1位 - 校验位无 - 帧间隔≥3.5字符时间 #### 2.2 数据层约束 - DATA-001Modbus帧格式 - 从站地址1字节范围1-247 - 功能码1字节 - 数据N字节 - CRC2字节 - DATA-002寄存器区 - 保持寄存器100个地址0-99 - 数据类型uint16_t #### 2.3 函数契约 - FUNC-001Modbus_Process - 签名int8_t Modbus_Process(uint8_t *rxBuf, uint16_t rxLen, uint8_t *txBuf, uint16_t *txLen) - 入参约束rxBuf非空rxLen≥4txBuf非空txLen非空 - 出参约束txBuf为响应帧txLen为响应长度 - 返回值0成功-1失败 #### 2.4 容错边界 - FT-001CRC校验 - 校验方法CRC-16Modbus - 校验失败丢弃帧不响应 - FT-002帧格式检查 - 检查项地址、功能码、数据长度 - 检查失败返回异常响应 - FT-003超时处理 - 帧接收超时50ms - 响应超时100ms ### 3. 编码层 #### 3.1 编码规范 - 遵循MISRA C:2012 - 函数命名Modbus_功能名 - 参数检查所有函数检查参数有效性 ### 4. AI生成指令 根据以上Spec生成Modbus RTU从站代码支持功能码03/06/16包含CRC校验、异常处理2.3 容错Spec模板通信容错Spec模板## Spec[通信类型]容错 ### 1. 容错边界 - FT-001通信失败重试 - 重试次数3次 - 重试间隔10ms - 失败后复位通信外设 - FT-002通信超时 - 超时时间100ms - 超时后取消操作复位外设 - FT-003数据校验 - 校验方法CRC校验 - 校验失败丢弃数据重试 - FT-004总线恢复 - 恢复方法复位外设 - 恢复后重新初始化 ### 2. AI生成指令 生成带容错的通信代码包含重试、超时、校验、总线恢复机制三、源码示例库详解3.1 驱动源码示例GPIO驱动示例/** * file gpio_driver.c * brief GPIO driver implementation * note Spec-ID: SPEC-GPIO-001 */#includegpio_driver.h/** * brief Initialize GPIO * param port: GPIO port (GPIOA, GPIOB, GPIOC) * param pin: GPIO pin (GPIO_PIN_0 ~ GPIO_PIN_15) * param mode: GPIO mode (INPUT, OUTPUT, AF, ANALOG) * retval 0: success, -1: failure */int8_tGPIO_Init(uint32_tport,uint16_tpin,uint8_tmode){GPIO_InitTypeDef GPIO_InitStruct{0};// Enable GPIO clockif(portGPIOA){__HAL_RCC_GPIOA_CLK_ENABLE();}elseif(portGPIOB){__HAL_RCC_GPIOB_CLK_ENABLE();}elseif(portGPIOC){__HAL_RCC_GPIOC_CLK_ENABLE();}else{return-1;// Invalid port}// Configure GPIOGPIO_InitStruct.Pinpin;GPIO_InitStruct.Modemode;GPIO_InitStruct.PullGPIO_NOPULL;GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init((GPIO_TypeDef*)port,GPIO_InitStruct);return0;}/** * brief Read GPIO state * param port: GPIO port * param pin: GPIO pin * param state: GPIO state (0 or 1) * retval 0: success, -1: failure */int8_tGPIO_Read(uint32_tport,uint16_tpin,uint8_t*state){if(stateNULL){return-1;}GPIO_PinState pinStateHAL_GPIO_ReadPin((GPIO_TypeDef*)port,pin);*state(pinStateGPIO_PIN_SET)?1:0;return0;}/** * brief Write GPIO state * param port: GPIO port * param pin: GPIO pin * param state: GPIO state (0 or 1) * retval 0: success, -1: failure */int8_tGPIO_Write(uint32_tport,uint16_tpin,uint8_tstate){GPIO_PinState pinState(state1)?GPIO_PIN_SET:GPIO_PIN_RESET;HAL_GPIO_WritePin((GPIO_TypeDef*)port,pin,pinState);return0;}3.2 完整项目示例温湿度采集系统示例/** * file main.c * brief Temperature and humidity collection system * note Spec-ID: SPEC-PROJECT-001 */#includemain.h#includesht30_driver.h#includeuart_driver.h#includegpio_driver.h// Global variablesfloatg_temperature0.0f;floatg_humidity0.0f;// Function prototypesvoidSystem_Init(void);voidData_Collection(void);voidData_Report(void);/** * brief Main function */intmain(void){// System initializationSystem_Init();// Main loopwhile(1){// Data collectionData_Collection();// Data reportData_Report();// DelayHAL_Delay(1000);}}/** * brief System initialization */voidSystem_Init(void){// HAL initializationHAL_Init();// Clock configurationSystemClock_Config();// GPIO initialization (LED indicator)GPIO_Init(GPIOA,GPIO_PIN_5,GPIO_MODE_OUTPUT_PP);// I2C initialization (SHT30)I2C_Init();// UART initialization (data report)UART_Init(USART1,115200);}/** * brief Data collection */voidData_Collection(void){// Read temperature and humidityif(SHT30_Read(g_temperature,g_humidity)!0){// Read failed, use safe valuesg_temperature25.0f;g_humidity50.0f;}// LED toggle (indicator)staticuint8_tledState0;GPIO_Write(GPIOA,GPIO_PIN_5,ledState);ledState!ledState;}/** * brief Data report */voidData_Report(void){charmsg[100];sprintf(msg,Temperature: %.2f°C, Humidity: %.2f%%\r\n,g_temperature,g_humidity);UART_Send(USART1,(uint8_t*)msg,strlen(msg));}四、Prompt模板库详解4.1 Vibe模式Prompt模板基础Prompt模板【Vibe模式 - 基础驱动生成】 目标生成[外设名称]驱动代码 硬件信息 - MCU型号[STM32F103] - 外设[UART1] - 引脚[PA9(TX), PA10(RX)] - 配置[波特率115200, 8N1] 功能需求 - 初始化 - 发送数据 - 接收数据 请生成完整的驱动代码使用HAL库迭代修正Prompt模板【Vibe模式 - 迭代修正】 当前问题[问题描述] 现象[具体现象] 期望[期望行为] 请修改代码解决问题4.2 Spec模式Prompt模板Spec驱动Prompt模板【Spec模式 - 驱动生成】 Spec内容 [粘贴完整Spec] 请根据以上Spec生成代码要求 1. 严格遵守Spec约束 2. 每个函数注释标注Spec ID 3. 包含参数检查 4. 包含容错处理Spec协议Prompt模板【Spec模式 - 协议生成】 Spec内容 [粘贴完整Spec] 请根据以上Spec生成协议实现代码要求 1. 严格遵守协议格式 2. 包含CRC校验 3. 包含异常处理 4. 包含超时处理4.3 容错设计Prompt模板容错设计Prompt模板【容错设计】 场景[具体场景] 不确定性 - [不确定性1] - [不确定性2] 容错要求 - 重试机制[重试次数]次 - 超时机制[超时时间]ms - 异常处理[处理方法] 请生成带容错的代码五、工程SOP文档详解5.1 Vibe模式工作流SOP## SOPVibe模式工作流 ### 适用场景 - 快速原型验证 - 毕设竞赛项目 - 学习实验 ### 工作流程 #### 步骤一需求口语化描述 - 输入功能需求 - 输出口语化描述 - 要求清晰、准确、完整 #### 步骤二AI生成代码 - 输入口语化描述 - 工具ChatGPT/Claude - 输出代码框架 #### 步骤三烧录试错 - 编译代码 - 烧录到硬件 - 观察运行现象 #### 步骤四迭代修正 - 输入问题描述 - AI生成修正代码 - 重复步骤三 #### 步骤五验证通过 - 功能正确 - 时序稳定 - 边界测试通过 ### 注意事项 - 每次只改一个问题 - 保留可用代码快照 - 明确描述问题现象5.2 Spec模式工作流SOP## SOPSpec模式工作流 ### 适用场景 - 量产产品开发 - 安全相关设备 - 长期维护项目 ### 工作流程 #### 步骤一需求分析 - 分析功能需求 - 分析安全需求 - 分析性能需求 #### 步骤二编写Spec - 需求层功能、安全、性能需求 - 设计层硬件、数据、函数、容错约束 - 编码层编码规范 - 测试层测试用例 #### 步骤三AI生成代码 - 输入完整Spec - AI生成代码 - 输出代码框架 #### 步骤四代码审查 - 审查逻辑正确性 - 审查规范符合性 - 审查安全正确性 #### 步骤五测试验证 - 功能测试 - 边界测试 - 异常测试 - 性能测试 #### 步骤六问题修复 - 分析问题原因 - 制定修复方案 - AI修改代码 - 重复步骤四-五 ### 注意事项 - Spec必须完整 - 代码必须审查 - 测试必须充分5.3 代码审查SOP## SOP代码审查 ### 审查时机 - 每次提交前 - 每个模块完成后 - 项目完成后 ### 审查内容 #### 逻辑审查 - [ ] 逻辑是否正确 - [ ] 是否实现设计意图 - [ ] 是否有遗漏 #### 规范审查 - [ ] 命名是否规范 - [ ] 注释是否完整 - [ ] 代码风格是否一致 #### 安全审查 - [ ] 参数是否检查 - [ ] 异常是否处理 - [ ] 容错是否完整 #### 性能审查 - [ ] 时序是否满足 - [ ] 资源是否满足 - [ ] 功耗是否满足 ### 审查记录 - 审查人 - 审查时间 - 审查结果 - 问题列表 - 修复方案六、资源使用建议6.1 新手使用建议阶段一学习阶段使用资源Spec模板学习Spec结构源码示例学习代码实现Prompt模板学习Prompt编写方法先阅读模板理解结构再参考示例理解实现最后实践掌握方法阶段二实践阶段使用资源Spec模板快速编写SpecPrompt模板快速生成代码工程SOP规范开发流程方法从模板库选择模板修改模板适应需求按SOP流程开发6.2 有经验工程师使用建议日常开发使用资源Spec模板快速编写Spec源码示例参考实现Prompt模板提高生成质量方法建立个人模板库持续优化模板积累最佳实践团队协作使用资源Spec模板团队统一规范工程SOP团队统一流程代码审查SOP团队统一标准方法建立团队模板库培训团队使用方法持续改进流程6.3 团队负责人使用建议建立团队规范使用资源Spec模板建立团队Spec规范工程SOP建立团队开发流程代码审查SOP建立团队审查标准方法选择适合团队的模板培训团队使用方法强制执行规范持续改进方法收集团队反馈优化模板和SOP分享最佳实践更新资源库七、本讲核心要点7.1 记住这三句话专栏提供完整配套资源Spec模板、源码示例、Prompt模板、工程SOP资源使用要循序渐进先学习理解再实践应用最后优化改进资源是工具不是目的目标是提高开发效率和质量资源是辅助手段7.2 模块一总结模块一嵌入式AI范式认知1-15讲核心内容 - Vibe模式快速原型、无约束、效率优先 - Spec模式量产固件、强约束、质量优先 - 范式选择根据项目特点选择合适范式 - 代码腐烂无约束AI生成的风险 - RTOS约束任务优先级、堆栈、互斥锁 - 裸机边界Vibe模式适用边界 - 工控轨交Spec约束满足SIL要求 - 人机分工人主导设计AI辅助实现 - 效率对比AI双范式效率提升2-10倍 - 混用误区混用范式导致工程混乱 - 学习路线Vibe入门→Spec进阶→混合精通 - 容错思维硬件不确定性的应对 - 资源说明配套资源介绍 学习目标 - 建立双范式认知 - 理解范式选择 - 掌握容错思维 - 了解配套资源7.3 下一模块预告模块二嵌入式Vibe极速原型编程16-40讲内容 - Vibe标准流程 - 外设驱动快速开发 - 时序快速验证 - 避坑指南 目标 - 掌握Vibe模式实战 - 快速开发原型 - 避免常见问题