fix(i2c): fix soft I2C driver - ACK polarity, SDA transitions, push-pull mode, timeout, float printf

This commit is contained in:
robinson
2026-05-12 00:22:59 +08:00
parent 5bf1920867
commit a697505ec0
132 changed files with 68562 additions and 68455 deletions

734
prompt.md
View File

@@ -1,367 +1,367 @@
# Embedded Firmware Architecture Prompt (强化版 · 带检查规则与自动纠错)
---
# 🎯 目标
本 Prompt 用于驱动 Agent 在嵌入式工程中执行**规范化开发 + 自动审查 + 自动修复**
* 严格分层APP / Module / Interface / HAL / BSP
* 自动检测架构违规
* 自动修复跨层调用与职责污染
* 输出可直接工程化代码
---
# 🧱 一、分层架构(不可违反)
```text
APP
Module
Interface
HAL
BSP
Driver / 寄存器
```
---
# 📌 二、职责定义(强约束)
| 层 | 允许做 | 禁止做 |
| --------- | ----- | ------------ |
| APP | 业务逻辑 | 调用 HAL/BSP |
| Module | 功能封装 | 绑定硬件 / 调 HAL |
| Interface | 抽象API | 写实现 / 用 BSP |
| HAL | 外设操作 | 写业务 / 写板级映射 |
| BSP | 硬件描述 | 写逻辑 |
---
# 🔗 三、调用链规则(强制执行)
## ✅ 唯一合法路径
```text
APP → Module → Interface → HAL → BSP
```
## ❌ 非法调用(必须报错 + 修复)
```text
Module → HAL
Module → BSP
Interface → BSP
HAL → Module
BSP → HAL主动调用
```
---
# 🧪 四、自动检查规则Agent必须执行
Agent 在生成或分析代码时,必须执行以下检查:
---
## ✅ 规则1依赖方向检查
**检测:**
* 是否存在“跨层调用”
**实现逻辑:**
```pseudo
if caller_layer > callee_layer:
ERROR
```
---
## ✅ 规则2语义污染检查
### HAL层检查
```pseudo
if file == HAL:
禁止出现关键词: led, motor, sensor
```
### BSP层检查
```pseudo
if file == BSP:
禁止出现:
if / for / while复杂逻辑
业务函数(如 led_on
```
---
## ✅ 规则3接口唯一性检查
```pseudo
if hardware_access not via Interface:
ERROR
```
---
## ✅ 规则4函数指针绑定位置
```pseudo
if ops赋值出现在 Module:
ERROR
```
---
## ✅ 规则5寄存器访问检查
```pseudo
if 寄存器操作出现在 HAL以上:
ERROR
```
---
# 🔧 五、自动纠错策略(核心)
Agent 必须在发现问题时**自动重构代码**,而不是仅提示错误。
---
## ❌ 错误1Module直接调用HAL
### 输入(错误):
```c
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);
```
### 自动修复:
```text
1. 创建 Interface API
led_if_write()
2. Module 改为:
led_if_write(id, state)
3. HAL 实现该接口
```
---
## ❌ 错误2Module绑定ops
### 输入:
```c
led->ops.write = bsp_led_write;
```
### 修复:
```text
1. 删除 Module 中 ops 绑定
2. 在 HAL 中定义 ops
3. 在 HAL 初始化中注册:
led_register_ops(&ops)
```
---
## ❌ 错误3HAL包含业务语义
### 输入:
```c
void hal_led_on()
```
### 修复:
```text
重命名为:
hal_gpio_write()
将“LED语义”移至 Module
```
---
## ❌ 错误4BSP写逻辑
### 输入:
```c
void bsp_led_on()
```
### 修复:
```text
拆分为:
BSP只保留 GPIO映射
HAL实现写操作
Module调用接口
```
---
## ❌ 错误5Interface直接调用BSP
### 修复:
```text
Interface → HAL → BSP
```
---
# 🔄 六、自动重构流程Agent执行流程
```pseudo
1. 解析代码
2. 标注每个函数所属层
3. 检查调用关系
4. 标记违规点
5. 应用纠错规则:
- 提取接口
- 下沉实现到HAL
- 上移语义到Module
6. 重构代码结构
7. 输出修复版本
```
---
# 🧠 七、层级识别规则Agent用
```pseudo
if 使用 GPIO/UART:
HAL
if 定义 pin mapping:
BSP
if 使用 xxx_if:
Interface
if 使用设备结构体:
Module
if 控制流程:
APP
```
---
# 📦 八、输出规范(强制)
Agent 输出代码必须:
* 按目录分层
* 每层文件独立
* 无跨层调用
* 接口统一
* 可编译
---
# 🧩 九、标准代码模板(自动生成)
## Interface模板
```c
typedef struct {
int (*init)(int id);
int (*write)(int id, int state);
} xxx_ops_t;
```
---
## HAL模板
```c
static int hal_xxx_write(...) { }
```
---
## Module模板
```c
xxx_if_write(...)
```
---
## BSP模板
```c
{GPIOA, GPIO_PIN_5}
```
---
# 🚨 十、错误等级定义
| 等级 | 类型 |
| ------- | ---- |
| FATAL | 架构破坏 |
| ERROR | 设计错误 |
| WARNING | 风格问题 |
---
# 🧭 十一、Agent行为模式
Agent必须
1. **优先保证架构正确**
2. **自动修复错误**
3. **不允许带病输出代码**
4. **必要时重构整个模块**
---
# 🧠 十二、核心哲学(必须遵守)
> **宁可重构,也不妥协分层**
---
# 🚀 十三、增强能力(可选)
* 自动生成 Interface
* 自动拆分 BSP / HAL
* 自动生成 Mock HAL用于测试
* 自动识别平台STM32 / Linux
---
# ✅ 使用方式
将本 Prompt 用于:
* AI代码生成
* Code Review
* 架构审查
* 自动重构工具
---
# 🧩 最终一句话
> **任何硬件访问必须经过 Interface任何硬件位置必须由 BSP 描述,任何硬件操作必须在 HAL 完成,任何功能逻辑必须在 Module任何决策必须在 APP**
---
# Embedded Firmware Architecture Prompt (强化版 · 带检查规则与自动纠错)
---
# 🎯 目标
本 Prompt 用于驱动 Agent 在嵌入式工程中执行**规范化开发 + 自动审查 + 自动修复**
* 严格分层APP / Module / Interface / HAL / BSP
* 自动检测架构违规
* 自动修复跨层调用与职责污染
* 输出可直接工程化代码
---
# 🧱 一、分层架构(不可违反)
```text
APP
Module
Interface
HAL
BSP
Driver / 寄存器
```
---
# 📌 二、职责定义(强约束)
| 层 | 允许做 | 禁止做 |
| --------- | ----- | ------------ |
| APP | 业务逻辑 | 调用 HAL/BSP |
| Module | 功能封装 | 绑定硬件 / 调 HAL |
| Interface | 抽象API | 写实现 / 用 BSP |
| HAL | 外设操作 | 写业务 / 写板级映射 |
| BSP | 硬件描述 | 写逻辑 |
---
# 🔗 三、调用链规则(强制执行)
## ✅ 唯一合法路径
```text
APP → Module → Interface → HAL → BSP
```
## ❌ 非法调用(必须报错 + 修复)
```text
Module → HAL
Module → BSP
Interface → BSP
HAL → Module
BSP → HAL主动调用
```
---
# 🧪 四、自动检查规则Agent必须执行
Agent 在生成或分析代码时,必须执行以下检查:
---
## ✅ 规则1依赖方向检查
**检测:**
* 是否存在“跨层调用”
**实现逻辑:**
```pseudo
if caller_layer > callee_layer:
ERROR
```
---
## ✅ 规则2语义污染检查
### HAL层检查
```pseudo
if file == HAL:
禁止出现关键词: led, motor, sensor
```
### BSP层检查
```pseudo
if file == BSP:
禁止出现:
if / for / while复杂逻辑
业务函数(如 led_on
```
---
## ✅ 规则3接口唯一性检查
```pseudo
if hardware_access not via Interface:
ERROR
```
---
## ✅ 规则4函数指针绑定位置
```pseudo
if ops赋值出现在 Module:
ERROR
```
---
## ✅ 规则5寄存器访问检查
```pseudo
if 寄存器操作出现在 HAL以上:
ERROR
```
---
# 🔧 五、自动纠错策略(核心)
Agent 必须在发现问题时**自动重构代码**,而不是仅提示错误。
---
## ❌ 错误1Module直接调用HAL
### 输入(错误):
```c
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1);
```
### 自动修复:
```text
1. 创建 Interface API
led_if_write()
2. Module 改为:
led_if_write(id, state)
3. HAL 实现该接口
```
---
## ❌ 错误2Module绑定ops
### 输入:
```c
led->ops.write = bsp_led_write;
```
### 修复:
```text
1. 删除 Module 中 ops 绑定
2. 在 HAL 中定义 ops
3. 在 HAL 初始化中注册:
led_register_ops(&ops)
```
---
## ❌ 错误3HAL包含业务语义
### 输入:
```c
void hal_led_on()
```
### 修复:
```text
重命名为:
hal_gpio_write()
将“LED语义”移至 Module
```
---
## ❌ 错误4BSP写逻辑
### 输入:
```c
void bsp_led_on()
```
### 修复:
```text
拆分为:
BSP只保留 GPIO映射
HAL实现写操作
Module调用接口
```
---
## ❌ 错误5Interface直接调用BSP
### 修复:
```text
Interface → HAL → BSP
```
---
# 🔄 六、自动重构流程Agent执行流程
```pseudo
1. 解析代码
2. 标注每个函数所属层
3. 检查调用关系
4. 标记违规点
5. 应用纠错规则:
- 提取接口
- 下沉实现到HAL
- 上移语义到Module
6. 重构代码结构
7. 输出修复版本
```
---
# 🧠 七、层级识别规则Agent用
```pseudo
if 使用 GPIO/UART:
HAL
if 定义 pin mapping:
BSP
if 使用 xxx_if:
Interface
if 使用设备结构体:
Module
if 控制流程:
APP
```
---
# 📦 八、输出规范(强制)
Agent 输出代码必须:
* 按目录分层
* 每层文件独立
* 无跨层调用
* 接口统一
* 可编译
---
# 🧩 九、标准代码模板(自动生成)
## Interface模板
```c
typedef struct {
int (*init)(int id);
int (*write)(int id, int state);
} xxx_ops_t;
```
---
## HAL模板
```c
static int hal_xxx_write(...) { }
```
---
## Module模板
```c
xxx_if_write(...)
```
---
## BSP模板
```c
{GPIOA, GPIO_PIN_5}
```
---
# 🚨 十、错误等级定义
| 等级 | 类型 |
| ------- | ---- |
| FATAL | 架构破坏 |
| ERROR | 设计错误 |
| WARNING | 风格问题 |
---
# 🧭 十一、Agent行为模式
Agent必须
1. **优先保证架构正确**
2. **自动修复错误**
3. **不允许带病输出代码**
4. **必要时重构整个模块**
---
# 🧠 十二、核心哲学(必须遵守)
> **宁可重构,也不妥协分层**
---
# 🚀 十三、增强能力(可选)
* 自动生成 Interface
* 自动拆分 BSP / HAL
* 自动生成 Mock HAL用于测试
* 自动识别平台STM32 / Linux
---
# ✅ 使用方式
将本 Prompt 用于:
* AI代码生成
* Code Review
* 架构审查
* 自动重构工具
---
# 🧩 最终一句话
> **任何硬件访问必须经过 Interface任何硬件位置必须由 BSP 描述,任何硬件操作必须在 HAL 完成,任何功能逻辑必须在 Module任何决策必须在 APP**
---