# ARCS SDK 示例文档编写规范(AI 辅助版) > 本规范用于指导 AI 生成和检查 ARCS SDK 示例文档,确保所有示例文档风格统一、信息完整、格式规范。 **版本**: 2.0 **日期**: 2025-01-14 **维护者**: ARCS SDK 团队 **适用范围**: 所有 samples/ 目录下的示例文档(README.md 或 README.rst) --- ## 目录 1. [规范概述](#规范概述) 2. [文档结构规范](#文档结构规范) 3. [各章节详细规范](#各章节详细规范) 4. [不同类型示例的差异](#不同类型示例的差异) 5. [格式规范](#格式规范) 6. [AI 生成文档指南](#ai-生成文档指南) 7. [AI 审查文档清单](#ai-审查文档清单) --- ## 规范概述 ### 核心原则 1. **结构一致性**: 所有示例遵循统一的章节结构和顺序 2. **信息完整性**: 必需章节不可缺失,关键信息必须包含 3. **格式统一性**: 支持 Markdown 或 reStructuredText 格式,格式内部保持一致 4. **语言规范性**: 中英文使用场景明确,术语表达一致 ### 文档格式说明 本规范支持两种文档格式: - **Markdown (README.md)**: 推荐格式,语法简洁,易于编写 - **reStructuredText (README.rst)**: 可选格式,适合需要复杂文档结构的场景 两种格式的章节结构和内容要求完全相同,仅语法有所差异。本文档主要以 Markdown 语法为例,RST 格式请参考对应的语法规范。 ### 示例分类 | 类型 | 路径 | 特征 | 代表示例 | |------|------|------|----------| | **设备驱动** | `samples/drivers/devices/` | 使用 LISA 设备 API,需硬件连接说明 | lisa_gpio, lisa_uart | | **组件模块** | `samples/modules/` | 系统组件/中间件,可能无硬件依赖 | sys_heap, lisa_shell | | **网络示例** | `samples/network/` | 网络协议/通信,需环境配置 | http, wifi_manager | | **HAL 驱动** | `samples/drivers/hal/` | 底层硬件抽象层,需硬件连接 | gpio, uart, spi | --- ## 文档结构规范 ### 标准章节结构(按顺序) #### 必需章节(所有示例) | 序号 | 章节 | 标题格式 | 必需性 | 适用范围 | |------|------|----------|--------|----------| | 1 | 标题 | `# {模块名} {功能}示例` | ✅ 必需 | 所有 | | 2 | 功能说明 | `## 功能说明` | ✅ 必需 | 所有 | | 3 | 硬件连接 | `## 硬件连接` | ✅ 必需 | 所有 | | 4 | 示例内容/步骤 | `## 示例内容` 或 `## 示例步骤` | ✅ 必需 | 所有 | | 5 | 编译 | `## 编译` | ✅ 必需 | 所有 | | 6 | 烧录 | `## 烧录` | ✅ 必需 | 所有 | | 7 | 预期输出 | `## 预期输出` | ✅ 必需 | 所有 | | 8 | 核心 API | `## 核心 API` | ⭐ 强烈推荐 | Devices, Modules | | 9 | 关键代码 | `## 关键代码` | ⭐ 强烈推荐 | 所有 | | 10 | 注意事项 | `## 注意事项` | ⭐ 强烈推荐 | 所有 | #### 可选章节(根据需要) | 章节 | 标题格式 | 使用场景 | |------|----------|----------| | 新特性 | `### 新特性` | 高级示例,展示技术优势 | | 使用场景 | `## 使用场景` | 需说明技术选型时 | | 配置说明 | `## 配置说明` | 有重要配置参数时 | | 功能详解 | `## {功能}说明` | 需解释工作原理时 | | 验证方法 | `## 验证方法` | 输出不可直接观察时 | | 测试环境 | `## 测试环境准备` | 需复杂环境配置时 | ### 章节顺序规则 **固定顺序(不可调整):** ``` 1. 标题(H1) 2. 功能说明(H2) └── 新特性(H3,可选) 3. 硬件连接(H2) 4. 使用场景/测试环境(H2,可选) 5. 示例内容/步骤(H2) 6. 编译(H2) 7. 烧录(H2) 8. 预期输出(H2) 9. 核心 API(H2,推荐) 10. 功能详解(H2,可选) 11. 关键代码(H2,推荐) 12. 配置说明(H2,可选) 13. 验证方法(H2,可选) 14. 注意事项(H2,推荐) 15. 相关文档(H2,可选) ``` --- ## 各章节详细规范 ### 1. 标题(H1) **格式模式:** ```markdown # {模块名称} {功能描述}示例{(可选说明)} ``` **规则:** - **模块名称**: 使用正式名称(LISA GPIO、系统堆管理、HTTP 客户端) - **功能描述**: 简洁明了(基础输出、内存分配、同步接收) - **可选说明**: 括号中注明特殊模式(DMA 模式、中断模式) **正确示例:** ```markdown ✅ # LISA GPIO 基础输出示例 ✅ # 系统堆管理基础示例 ✅ # LISA UART 同步接收示例(DMA 模式) ✅ # HTTP 客户端基础示例 ``` **错误示例:** ```markdown ❌ # gpio example (未使用中文,未规范化模块名) ❌ # LISA_GPIO 基础示例 (模块名使用下划线) ❌ # GPIO 示例 (缺少 LISA 前缀) ``` ### 2. 功能说明(H2,必需) **格式:** ```markdown ## 功能说明 {第一段:核心功能说明(1-2 句话)} {第二段:可选补充说明(技术特点/底层实现)} ``` **内容要求:** 1. **第一段**(必需): - 1-2 句话说明核心功能 - 40-200 字为宜 - 说明"做什么"和"怎么做" 2. **第二段**(可选): - 补充技术特点或实现细节 - 突出技术优势或注意事项 **正确示例:** ```markdown ## 功能说明 演示如何使用 LISA GPIO 驱动控制 LED 闪烁,通过配置引脚为输出模式,周期性输出高低电平实现 LED 的亮灭切换。 ``` ```markdown ## 功能说明 演示如何使用系统堆管理组件分配和释放内存,包括内部 SRAM 和外部 PSRAM 的基本操作。 ``` ```markdown ## 功能说明 此示例演示如何使用 LISA HTTP 客户端库进行基本的 HTTP 通信,包括: - HTTP GET 请求 - HTTP POST 请求(普通表单数据) - HTTP POST 请求(Chunked 传输编码) 示例通过 WiFi 连接到测试服务器,执行多个 HTTP 请求并接收响应,展示了 HTTP 客户端的基本用法。 ``` **错误示例:** ```markdown ❌ ## 功能说明 This example shows... (使用英文) ❌ ## 功能说明 本示例功能强大,非常好用,可以实现各种复杂的操作... (描述过于笼统,未说明具体功能) ``` ### 3. 新特性(H3,可选) **使用时机:** - 高级示例(DMA、中断、异步等) - 有明显技术优势需要突出 - 与基础示例有显著差异 **格式:** ```markdown ### 新特性 - **特性1**: 简短说明 - **特性2**: 简短说明 - **特性3**: 简短说明 ``` **内容要求:** - 使用无序列表 - 每项开头用 **粗体** 标注特性名称 - 3-5 项为宜 - 每项一行,简洁明了 **正确示例:** ```markdown ### 新特性 - **DMA 硬件传输**: 无需 CPU 参与数据搬移,降低 CPU 占用 - **异步非阻塞**: 调用后立即返回,DMA 后台传输 - **事件回调通知**: 传输完成后通过中断回调通知应用层 - **适合高速率场景**: 支持高波特率连续发送,不阻塞主任务 ``` ### 4. 硬件连接(H2,必需) **格式(有外部连接):** ```markdown ## 硬件连接 - **引脚编号**: 功能说明 - **引脚编号**: 功能说明 {补充说明(可选)} ``` **格式(无外部连接):** ```markdown ## 硬件连接 无需外部连接,{模块}为芯片内部资源。 ``` **内容要求:** 1. **引脚说明**: - 使用无序列表 - 引脚编号用 **粗体** - 说明引脚功能和用途 2. **补充说明**: - 连接方式、配置参数 - 外部设备要求 - 硬件注意事项 **正确示例(有连接):** ```markdown ## 硬件连接 - **PB09**: LED 控制引脚(外接 LED 与限流电阻,ARCS-EVB 板载接口) 将 LED 正极(长脚)通过限流电阻(推荐 220Ω-1kΩ)连接到 PB09 引脚,负极(短脚)连接到 GND。 ``` ```markdown ## 硬件连接 - **PA2**: UART0 RX(接收) - **PA3**: UART0 TX(发送) 连接到 PC 串口工具,配置为 **115200, 8N1, 无流控** ``` **正确示例(无连接):** ```markdown ## 硬件连接 无需外部连接,系统堆为芯片内部资源。 ``` ```markdown ## 硬件连接 本示例使用芯片内部 WiFi 外设,无需额外接线。 **串口输出:** - 串口 TX: PA3 - 波特率:921600 ``` ### 5. 示例内容/步骤(H2,必需) **标题选择:** - `## 示例内容`: 用于功能演示类示例 - `## 示例步骤`: 用于操作流程类示例 **格式:** ```markdown ## 示例内容 1. 步骤1描述 2. 步骤2描述 3. 步骤3描述 4. 步骤4描述 ``` **内容要求:** - 使用有序列表(编号列表) - 3-6 个步骤为宜 - 每步简洁明了,突出关键操作 - 按执行顺序排列 **正确示例:** ```markdown ## 示例内容 1. 从内部 SRAM 分配 256 字节内存 2. 从外部 PSRAM 分配 1024 字节内存 3. 使用 `psram_calloc()` 分配并清零内存 4. 使用 `psram_realloc()` 重新分配内存 5. 查看堆使用统计信息 ``` ```markdown ## 示例步骤 1. 获取 GPIOB 设备 2. 配置 PB09 引脚为输出模式,初始电平为低 3. 循环切换引脚输出电平(高/低) 4. 每次切换间隔 1 秒,实现 LED 闪烁效果 ``` ### 6. 编译/运行(H2,必需) **标题选择:** - `## 编译`: 仅说明编译(推荐) - `## 编译运行`: 包含编译和运行 - `## 编译` + 独立 `## 烧录`: 编译和烧录分开(推荐) **推荐格式(使用 RST 引用):** ```markdown ## 编译 ​```{eval-rst} .. include:: /sample_build.rst ​``` ## 烧录 ​```{eval-rst} .. include:: /sample_flash.rst ​``` ``` **说明:** - 统一使用 RST 引用文件,保持格式一致性 - `/sample_build.rst` 包含标准编译命令 - `/sample_flash.rst` 包含标准烧录命令 - 分开成两个独立的 H2 章节(`## 编译` 和 `## 烧录`) **备选格式(直接写命令):** 如果需要特殊的编译参数或说明,可以直接写命令: ```markdown ## 编译 ​```bash ./build.sh -C -DBOARD=arcs_evb ​``` ## 烧录 ​```bash ./build.sh -F ​``` ``` **合并格式(不推荐):** ```markdown ## 编译运行 ### 编译 ​```{eval-rst} .. include:: /sample_build.rst ​``` ### 烧录 ​```{eval-rst} .. include:: /sample_flash.rst ​``` ``` **注意:** - 优先使用 RST 引用格式,除非有特殊说明需要 - 编译和烧录建议分为两个独立的 H2 章节,而不是使用 H3 子章节 ### 7. 预期输出(H2,必需) **格式(单一输出源):** ```markdown ## 预期输出 ​``` [I][sample] === Example Output === ... ​``` ``` **格式(多个输出源):** ```markdown ## 预期输出 **终端输出:** ​``` [I][sample] === Example Output === ... ​``` **串口工具接收:** ​``` Hello World ... ​``` **LED 状态:** - LED 每秒切换一次亮灭状态 ``` **内容要求:** 1. **真实输出**: 必须与实际运行结果一致 2. **完整性**: 包含关键日志,可用 `...` 省略重复部分 3. **格式**: 使用代码块,保持原始格式 4. **分类**: 多个输出源用 **粗体标题** 分隔 **正确示例:** ```markdown ## 预期输出 **终端输出:** ​``` === LISA GPIO output example === gpiob device ready Start toggling LED... LED is ON LED is OFF LED is ON LED is OFF ... ​``` **LED 状态:** - LED 每秒切换一次亮灭状态 - 亮时对应高电平输出,灭时对应低电平输出 ``` ### 8. 核心 API(H2,强烈推荐) **使用场景:** - 设备驱动示例(Devices) - 组件模块示例(Modules) - 有明确 API 调用的示例 **格式:** ```markdown ## 核心 API | API | 说明 | |-----|------| | `api_function_1()` | 功能说明1 | | `api_function_2()` | 功能说明2 | | `api_function_3()` | 功能说明3 | ``` **内容要求:** 1. **使用表格**: 固定两列格式 2. **API 名称**: 使用反引号 `包裹,保留括号 `()` 3. **顺序**: 按调用顺序排列 4. **数量**: 3-8 个关键 API 5. **说明**: 简洁准确,动词开头 **正确示例:** ```markdown ## 核心 API | API | 说明 | |-----|------| | `lisa_device_get()` | 获取 GPIO 设备 | | `lisa_device_ready()` | 检查设备是否就绪 | | `lisa_gpio_configure()` | 配置 GPIO 引脚模式和属性 | | `lisa_gpio_write_pin()` | 设置 GPIO 引脚输出电平 | ``` ```markdown ## 核心 API | API | 说明 | |-----|------| | `inram_malloc()` | 从内部 SRAM 分配内存 | | `inram_free()` | 释放内部 SRAM 内存 | | `psram_malloc()` | 从 PSRAM 分配内存 | | `psram_calloc()` | 从 PSRAM 分配并清零内存 | | `psram_realloc()` | 重新分配 PSRAM 内存 | | `psram_free()` | 释放 PSRAM 内存 | | `heap_summary_info()` | 打印堆统计信息 | ``` ### 9. 关键代码(H2,强烈推荐) **使用场景:** - 有重要配置或技巧需要展示 - 代码包含关键 API 调用序列 - 需要解释复杂代码逻辑 **格式:** ```markdown ## 关键代码 ​```c /* 注释说明 */ code_block(); /* 注释说明 */ another_code_block(); ​``` ``` **内容要求:** 1. **语言标注**: 必须指定 `c` 2. **注释**: 关键代码添加中文注释 3. **完整性**: 代码片段可独立理解 4. **简洁性**: 省略无关代码,突出重点 **正确示例:** ```markdown ## 关键代码 ​```c /* 配置为输出模式,初始电平为低 */ int ret = lisa_gpio_configure(gpio_dev, LED_PIN, LISA_GPIO_OUTPUT | LISA_GPIO_OUTPUT_INIT_LOW); /* 循环切换 LED 状态 */ bool led_on = true; while (1) { lisa_gpio_write_pin(gpio_dev, LED_PIN, led_on ? LISA_GPIO_HIGH : LISA_GPIO_LOW); LISA_LOGI(LOG_TAG, "LED is %s", led_on ? "ON" : "OFF"); vTaskDelay(pdMS_TO_TICKS(1000)); led_on = !led_on; } ​``` ``` ### 10. 配置说明(H2,可选) **使用场景:** - 有重要配置参数 - 配置有特殊要求或限制 - Kconfig 配置项说明 **格式:** ```markdown ## 配置说明 ### 配置项1名称 {说明内容} - **配置1**: 说明 - **配置2**: 说明 ### 配置项2名称 {说明内容} ``` **正确示例:** ```markdown ## 配置说明 ### 堆大小配置 在 Kconfig 中可配置堆大小(组件默认已配置): - **`CONFIG_HEAP_SIZE`**: 内部 SRAM 堆大小,默认 0x5000 (20KB) - **`CONFIG_PSRAM_HEAP_SIZE`**: PSRAM 堆大小,默认 0x20000 (128KB) ### 对齐要求 - **`inram_malloc(align, size)`**: `align` 参数指定对齐字节数,必须是 2 的幂次方(4, 8, 16, 32 等) - **`psram_malloc(size)`**: 默认 4 字节对齐 - **`psram_malloc_align(align, size)`**: 指定对齐字节数,用于 DMA 等需要特定对齐的场景 ``` ### 11. 注意事项(H2,强烈推荐) **使用场景:** - 所有示例都应包含 - 有重要限制或约束 - 常见错误提醒 **格式:** ```markdown ## 注意事项 1. **关键词1**: 详细说明 2. **关键词2**: 详细说明 3. **关键词3**: 详细说明 ``` **内容要求:** 1. **使用有序列表** 2. **关键词粗体**: 每项开头用 **粗体** 标注关键词 3. **数量**: 3-5 项为宜 4. **内容**: 安全、限制、易错点、最佳实践 **正确示例:** ```markdown ## 注意事项 1. **返回值检查**: 分配内存后务必检查返回值是否为 NULL,防止使用无效指针 2. **内存释放**: 使用完毕后及时释放内存,避免内存泄漏 3. **对齐参数**: `align` 参数必须是 2 的幂次方,否则会导致对齐错误 4. **自动初始化**: 系统堆在 main 函数前自动初始化,无需手动调用 5. **线程安全**: 所有堆分配接口都是线程安全的,可在多任务环境下使用 ``` --- ## 不同类型示例的差异 ### Devices(设备驱动示例) **特征:** - 使用 LISA 设备驱动 API - 必需硬件连接说明 - 强调引脚配置和参数 **必需章节:** - ✅ 硬件连接(详细引脚说明) - ✅ 核心 API(LISA 设备 API) - ✅ 注意事项(硬件相关限制) **可选章节:** - 配置说明(参数配置) - 验证方法(硬件验证) **示例:** [lisa_gpio/output_basic](samples/drivers/devices/lisa_gpio/output_basic/) ### Modules(组件模块示例) **特征:** - 系统组件/中间件 - 可能无硬件依赖 - 注重 API 使用方法 **必需章节:** - ✅ 功能说明(详细功能说明) - ✅ 核心 API(组件 API) - ✅ 关键代码(使用示例) **可选章节:** - 配置说明(Kconfig 配置) - 使用场景(应用场景) **示例:** [modules/sys_heap](samples/modules/sys_heap/), [modules/lisa_shell](samples/modules/lisa_shell/) ### Network(网络示例) **特征:** - 涉及网络协议 - 需要环境配置 - 包含连接建立过程 **必需章节:** - ✅ 功能说明(网络功能) - ✅ 测试环境准备(环境配置) - ✅ 预期输出(网络交互日志) **可选章节:** - 核心 API(网络 API) - 配置说明(网络参数) **示例:** [network/http](samples/network/http/) ### HAL(硬件抽象层示例) **特征:** - 底层硬件接口 - 使用表情符号标题(历史原因) - 简洁实用 **必需章节:** - ✅ 📖示例说明(功能说明) - ✅ 硬件连接 - ✅ 预期输出 **特殊规则:** - 可使用 `📖示例说明` 替代 `功能说明` - 通常不包含核心 API 章节 --- ## 格式规范 ### 文档格式选择 #### Markdown 格式 (README.md) - 推荐 **优点:** - 语法简洁,易于学习和编写 - GitHub/GitLab 原生支持预览 - 工具链完善 **适用场景:** - 大部分示例文档 - 结构简单的文档 #### reStructuredText 格式 (README.rst) - 可选 **优点:** - 功能强大,支持复杂文档结构 - Sphinx 文档系统原生格式 - 适合技术文档 **适用场景:** - 需要复杂表格或指令的文档 - 需要与 Sphinx 文档系统集成 **选择建议:** 优先使用 Markdown,除非有特殊需求。 --- ### Markdown 语法规范 #### 1. 标题层级 ```markdown # H1 - 文档标题(只能有一个) ## H2 - 主要章节 ### H3 - 子章节 #### H4 - 更小的子章节(慎用) ``` **规则:** - H1 只能有一个(文档标题) - H2 用于主要章节 - H3 用于子章节(如"新特性"、配置项) - 避免使用 H4 及以下层级 #### RST 等价语法 ```rst 标题(H1) ========= 章节(H2) --------- 子章节(H3) ^^^^^^^^^^^ ``` #### 2. 代码块 **Markdown 格式:** ```markdown ​```c // C 代码 ​``` ​```bash # Bash 命令 ​``` ​``` 纯文本输出 ​``` ``` **RST 格式:** ```rst .. code-block:: c // C 代码 .. code-block:: bash # Bash 命令 .. code-block:: text 纯文本输出 ``` **语言标注要求:** - `c`: C 语言代码 - `bash`: Shell 命令 - `text` (RST) 或无标注 (Markdown): 纯文本输出 #### 3. 行内代码标记 **Markdown 格式:** ```markdown 使用 `lisa_gpio_configure()` 配置引脚。 配置项 `CONFIG_HEAP_SIZE` 的默认值是 0x5000。 变量 `gpio_dev` 保存设备句柄。 ``` **RST 格式:** ```rst 使用 ``lisa_gpio_configure()`` 配置引脚。 配置项 ``CONFIG_HEAP_SIZE`` 的默认值是 0x5000。 变量 ``gpio_dev`` 保存设备句柄。 ``` **规则:** - API 函数名保留括号: `function()` (Markdown) 或 ``function()`` (RST) - 配置项宏定义: `CONFIG_NAME` - 变量名: `variable_name` #### 4. 粗体使用 **关键概念、重要信息:** ```markdown - **返回值检查**: 务必检查返回值 - **内存对齐**: 必须 **32 字节对齐** 连接到 PC 串口工具,配置为 **115200, 8N1, 无流控** ``` **规则:** - 注意事项的关键词 - 重要参数值 - 强调的概念 #### 5. 表格格式 **Markdown 格式:** ```markdown | 列1标题 | 列2标题 | |---------|---------| | 内容1 | 说明1 | | 内容2 | 说明2 | ``` **RST 格式:** ```rst .. list-table:: :header-rows: 1 * - 列1标题 - 列2标题 * - 内容1 - 说明1 * - 内容2 - 说明2 ``` **规则:** - Markdown: 使用对齐的 `|` 分隔符,第二行用 `-` 分隔标题和内容 - RST: 使用 `.. list-table::` 指令,`:header-rows: 1` 指定标题行 - API 表格固定格式: `| API | 说明 |` (Markdown) 或对应的 RST list-table #### 6. 列表格式 **有序列表(步骤、注意事项):** ```markdown 1. 第一步 2. 第二步 3. 第三步 ``` **无序列表(特性、引脚、配置):** ```markdown - 项目1 - 项目2 - 项目3 ``` **子列表(2 空格缩进):** ```markdown - 父项目 - 子项目1 - 子项目2 ``` ### 语言规范 #### 1. 中英文使用规则 | 位置 | 语言 | 示例 | |------|------|------| | 文档正文 | 中文 | 演示如何使用... | | 代码注释 | 中文 | `/* 配置引脚为输出模式 */` | | API 名称 | 英文 | `lisa_gpio_configure()` | | 配置项 | 英文 | `CONFIG_HEAP_SIZE` | | 日志输出 | 英文 | `LISA_LOGI(LOG_TAG, "Device ready");` | | 代码变量 | 英文 | `uint8_t *buffer;` | #### 2. 术语标准表达 **模块名称:** - ✅ LISA GPIO(正确) - ❌ lisa_gpio, GPIO, lisa gpio(错误) **技术术语:** - ✅ DMA 模式(正确) - ❌ dma 模式, Dma 模式(错误) - ✅ 中断模式(正确) - ❌ INT 模式, interrupt 模式(错误) - ✅ 同步/异步(正确) - ❌ sync/async(仅在代码中使用) **一致性原则:** 同一概念在整篇文档中必须使用统一术语,不能混用。 #### 3. 中英文混排 **规则:** 中英文之间通常不加空格(除非是完整英文句子)。 **示例:** ```markdown ✅ 使用`lisa_gpio_configure()`配置引脚为输出模式。 ✅ 使用 `lisa_gpio_configure()` 配置引脚为输出模式。 ✅ 配置项`CONFIG_HEAP_SIZE`的默认值是 0x5000。 ``` --- ## AI 生成文档指南 ### 生成流程 当 AI 收到"生成示例文档"的任务时,按以下流程操作: #### 第一步:确定示例类型 ``` 问题:这是哪种类型的示例? 选项: - Devices(设备驱动) - Modules(组件模块) - Network(网络示例) - HAL(硬件抽象层) ``` #### 第二步:确定复杂度 ``` 问题:这是基础示例还是高级示例? - 基础示例:使用基础模板,包含必需章节 - 高级示例:使用高级模板,增加"新特性"、"使用场景"等章节 ``` #### 第三步:收集信息 ``` 收集以下信息: 1. 模块名称(如:LISA GPIO、系统堆管理) 2. 功能描述(如:基础输出、内存分配) 3. 硬件连接(引脚信息或"无需外部连接") 4. 示例步骤(3-6 个关键步骤) 5. 核心 API(3-8 个关键 API 及说明) 6. 预期输出(实际日志或输出描述) 7. 注意事项(3-5 个关键限制或提醒) ``` #### 第四步:选择模板 根据类型和复杂度选择合适模板: ``` 基础示例模板: - 标题 - 功能说明 - 硬件连接 - 示例内容 - 编译(使用 RST 引用) - 烧录(使用 RST 引用) - 预期输出 - 核心 API - 关键代码 - 注意事项 高级示例模板: - 标题 - 功能说明 - 新特性(H3) - 硬件连接 - 使用场景 - 示例步骤 - 编译(使用 RST 引用) - 烧录(使用 RST 引用) - 预期输出 - 核心 API - 功能详解 - 关键代码 - 配置说明 - 注意事项 ``` #### 第五步:填充内容 按模板顺序填充各章节,确保: 1. **标题格式正确**: `# {模块} {功能}示例` 2. **功能说明简洁**: 1-2 句话 3. **硬件连接完整**: 引脚信息或明确说明"无需外部连接" 4. **步骤清晰有序**: 使用有序列表 5. **编译和烧录**: 使用 RST 引用格式(`.. include:: /sample_build.rst` 和 `.. include:: /sample_flash.rst`) 6. **API 表格规范**: 使用标准表格格式 7. **代码块标注语言**: `c`、`bash` 或无标注 8. **注意事项完整**: 3-5 项,关键词粗体 #### 第六步:自检 生成后对照"AI 审查文档清单"自检。 ### 生成示例模板 #### 基础示例模板 ```markdown # {模块名称} {功能描述}示例 ## 功能说明 {1-2 句话说明核心功能} ## 硬件连接 - **引脚1**: 功能说明 - **引脚2**: 功能说明 或: 无需外部连接,{模块}为芯片内部资源。 ## 示例内容 1. 步骤1 2. 步骤2 3. 步骤3 4. 步骤4 ## 编译 ​```{eval-rst} .. include:: /sample_build.rst ​``` ## 烧录 ​```{eval-rst} .. include:: /sample_flash.rst ​``` ## 预期输出 ​``` [I][sample] === Example Output === {实际输出内容} ​``` ## 核心 API | API | 说明 | |-----|------| | `api_1()` | 功能说明1 | | `api_2()` | 功能说明2 | | `api_3()` | 功能说明3 | ## 关键代码 ​```c /* 关键代码片段 */ code_example(); ​``` ## 注意事项 1. **关键词1**: 说明 2. **关键词2**: 说明 3. **关键词3**: 说明 ``` #### 高级示例模板 ```markdown # {模块名称} {功能描述}示例({模式说明}) ## 功能说明 {1-2 句话说明核心功能} ### 新特性 - **特性1**: 说明 - **特性2**: 说明 - **特性3**: 说明 ## 硬件连接 - **引脚1**: 功能说明 - **引脚2**: 功能说明 {补充连接说明} ## 使用场景 {适用场景和技术选型说明} ## 示例步骤 1. 步骤1 2. 步骤2 3. 步骤3 4. 步骤4 ## 编译 ​```{eval-rst} .. include:: /sample_build.rst ​``` ## 烧录 ​```{eval-rst} .. include:: /sample_flash.rst ​``` ## 预期输出 **终端输出:** ​``` [I][sample] === Example Output === {输出内容} ​``` **{其他输出源}:** {描述} ## 核心 API | API | 说明 | |-----|------| | `api_1()` | 功能说明1 | | `api_2()` | 功能说明2 | | `api_3()` | 功能说明3 | ## {功能}说明 {详细说明工作原理和特性} ## 关键代码 ​```c /* 关键代码片段 */ code_example(); ​``` ## 配置说明 ### 配置项1 {说明} ### 配置项2 {说明} ## 注意事项 1. **关键词1**: 说明 2. **关键词2**: 说明 3. **关键词3**: 说明 4. **关键词4**: 说明 ``` --- ## AI 审查文档清单 当 AI 收到"检查示例文档"的任务时,使用以下清单逐项检查: ### 结构检查 ``` □ 标题(H1)存在且格式正确 □ 功能说明(H2)存在且简洁(1-2 句话,40-200 字) □ 硬件连接(H2)存在且完整(有引脚信息或明确说明无需连接) □ 示例内容/步骤(H2)存在且使用有序列表 □ 编译(H2)存在且使用 RST 引用(推荐)或包含构建命令 □ 烧录(H2)存在且使用 RST 引用(推荐)或包含烧录命令 □ 预期输出(H2)存在且非空 □ 核心 API(H2)存在(Devices/Modules 类型) □ 注意事项(H2)存在且有 3-5 项 □ 章节顺序符合规范 ``` ### 格式检查 ``` □ 文档格式正确(Markdown .md 或 RST .rst) □ 所有代码块指定了语言(c/bash/text) □ 编译和烧录使用引用格式(Markdown 用 eval-rst,RST 用 include 指令) □ API 名称使用正确标记(Markdown 用 `,RST 用 ``) □ 核心 API 使用标准表格格式(Markdown 表格或 RST list-table) □ 注意事项使用有序列表,关键词用粗体(Markdown **粗体**,RST **粗体**) □ 引脚编号用粗体(Markdown **PB09**,RST **PB09**) □ 中英文混排符合规范 □ 无过深层级标题(避免 H4/H5 或 RST 过多下划线层级) □ 编译和烧录为独立章节(不使用子章节) □ 格式内部保持一致(不混用 Markdown 和 RST 语法) ``` ### 内容检查 ``` □ 标题格式:{模块} {功能}示例 □ 功能说明不超过 200 字 □ 硬件连接有具体引脚或明确说明无需连接 □ 示例步骤有 3-6 项 □ 预期输出与代码一致(如果有源代码) □ API 表格有 3-8 项,按调用顺序排列 □ 注意事项包含重要限制和易错点 □ 术语使用一致(如:DMA 模式,不是 dma 模式) ``` ### 语言检查 ``` □ 文档正文使用中文 □ API 名称使用英文 □ 代码注释使用中文 □ 日志输出使用英文 □ 术语表达标准化(LISA GPIO、DMA 模式、中断模式) □ 同一概念术语统一,无混用 ``` ### 类型特定检查 **Devices(设备驱动):** ``` □ 标题使用 LISA 前缀(如:LISA GPIO) □ 硬件连接详细(引脚编号、功能、接线方式) □ 核心 API 包含 lisa_device_get() 等设备 API □ 注意事项包含硬件相关限制 ``` **Modules(组件模块):** ``` □ 功能说明详细说明组件功能 □ 硬件连接说明"无需外部连接"(如适用) □ 核心 API 包含组件关键 API □ 可选:配置说明章节(Kconfig) ``` **Network(网络示例):** ``` □ 功能说明包含网络协议/功能 □ 可选:测试环境准备章节 □ 预期输出包含网络交互日志 □ 注意事项包含网络环境要求 ``` ### 审查报告格式 AI 检查后应输出以下格式的报告: ```markdown # 文档审查报告 **文档路径**: {文件路径} **示例类型**: {Devices/Modules/Network/HAL} **审查日期**: {日期} ## 审查结果 **总体评分**: {通过/需修改/不合格} ## 问题清单 ### 必需修改(阻塞问题) 1. **[结构]** {问题描述} - **位置**: {章节名称} - **问题**: {具体问题} - **建议**: {修改建议} 2. **[格式]** {问题描述} - **位置**: {章节名称/行号} - **问题**: {具体问题} - **建议**: {修改建议} ### 建议优化(非阻塞) 1. **[内容]** {问题描述} - **位置**: {章节名称} - **建议**: {优化建议} ## 符合规范项 ✅ 标题格式正确 ✅ 功能说明简洁 ✅ 章节顺序符合规范 ... ## 总结 {总体评价和建议} ``` --- ## 附录 ### 附录 A:常见问题 #### Q1: 何时使用"示例内容"vs"示例步骤"? **A**: - **示例内容**: 用于功能演示类示例,列出演示的功能点 - **示例步骤**: 用于操作流程类示例,列出执行的步骤 示例: ```markdown ## 示例内容(功能演示) 1. 从内部 SRAM 分配内存 2. 从外部 PSRAM 分配内存 3. 使用 calloc 分配并清零内存 ## 示例步骤(操作流程) 1. 获取 UART 设备 2. 配置 UART 参数 3. 发送数据并等待完成 ``` #### Q2: 何时添加"新特性"章节? **A**: - 高级示例(DMA、中断、异步等) - 有明显技术优势需要突出 - 与基础示例有显著差异 #### Q3: 硬件连接章节可以省略吗? **A**: 不可以。所有示例都必须包含硬件连接章节,即使无需外部连接,也应明确说明"无需外部连接,{模块}为芯片内部资源"。 #### Q4: 预期输出必须包含实际日志吗? **A**: 是的。预期输出必须与实际运行结果一致。如果输出很长,可以使用 `...` 省略重复部分,但关键日志必须包含。 #### Q5: 核心 API 章节是必需的吗? **A**: 强烈推荐,特别是 Devices 和 Modules 类型示例。Network 和 HAL 类型可根据情况选择。 ### 附录 B:术语对照表 | 中文术语 | 英文术语 | 使用场景 | |----------|----------|----------| | 设备驱动 | Device Driver | 文档正文 | | 组件模块 | Module | 文档正文 | | 引脚 | Pin | 硬件连接 | | 中断模式 | Interrupt Mode | 功能说明 | | DMA 模式 | DMA Mode | 功能说明 | | 同步发送 | Synchronous Send | 功能说明 | | 异步发送 | Asynchronous Send | 功能说明 | | 循环缓冲区 | Circular Buffer | 技术说明 | | 串口工具 | Serial Tool | 硬件连接 | | 波特率 | Baud Rate | 配置说明 | | 占空比 | Duty Cycle | PWM 相关 | | 内存对齐 | Memory Alignment | 配置说明 | ### 附录 C:Markdown 与 RST 格式对照 #### 基本语法对照表 | 元素 | Markdown | RST | |------|----------|-----| | H1 标题 | `# 标题` | `标题\n====` | | H2 标题 | `## 标题` | `标题\n----` | | H3 标题 | `### 标题` | `标题\n^^^^` | | 行内代码 | `` `code` `` | ``` ``code`` ``` | | 代码块 | ` ```c\ncode\n``` ` | `.. code-block:: c\n\n code` | | 粗体 | `**粗体**` | `**粗体**` | | 链接 | `[text](url)` | `` `text `_ `` | | 表格 | Markdown table | `.. list-table::` | | Include | `{eval-rst}\n.. include::` | `.. include::` | #### 完整示例对照 **Markdown 版本:** ```markdown # LISA GPIO 基础输出示例 ## 功能说明 演示如何使用 `lisa_gpio_configure()` 配置引脚。 ## 编译 ​```{eval-rst} .. include:: /sample_build.rst ​``` ## 核心 API | API | 说明 | |-----|------| | `lisa_device_get()` | 获取设备 | ``` **RST 版本:** ```rst LISA GPIO 基础输出示例 ====================== 功能说明 -------- 演示如何使用 ``lisa_gpio_configure()`` 配置引脚。 .. include:: /sample_build.rst 核心 API -------- .. list-table:: :header-rows: 1 * - API - 说明 * - ``lisa_device_get()`` - 获取设备 ``` ### 附录 D:示例文档索引 **优秀示例文档(推荐参考):** - **Devices (Markdown)**: - [samples/drivers/devices/lisa_gpio/output_basic/README.md](samples/drivers/devices/lisa_gpio/output_basic/README.md) - [samples/drivers/devices/lisa_uart/send_async_dma/README.md](samples/drivers/devices/lisa_uart/send_async_dma/README.md) - **Modules (Markdown)**: - [samples/modules/sys_heap/README.md](samples/modules/sys_heap/README.md) - [samples/modules/lisa_shell/README.md](samples/modules/lisa_shell/README.md) - **Network (Markdown)**: - [samples/network/http/README.md](samples/network/http/README.md) - **Basic (RST)**: - [samples/helloworld/README.rst](samples/helloworld/README.rst) ### 附录 E:版本历史 | 版本 | 日期 | 变更说明 | |------|------|----------| | 1.0 | 2025-01-15 | 初始版本(Samples_Spec.md) | | 2.0 | 2025-01-14 | AI 辅助版,基于 114 个示例文档分析 | | 2.1 | 2025-01-14 | 支持 Markdown 和 RST 两种格式 | **主要变更(2.1):** 1. **支持双格式**: 允许使用 Markdown (.md) 或 reStructuredText (.rst) 2. **格式对照**: 新增附录 C - Markdown 与 RST 格式对照表 3. **审查清单更新**: 格式检查项适配双格式要求 4. **语法规范**: 补充 RST 格式的等价语法说明 5. **示例索引**: 新增 RST 格式示例文档引用 **主要变更(2.0):** 1. 基于实际分析数据(114 个 README.md) 2. 明确不同类型示例的差异和特殊规则 3. 新增 AI 生成文档指南 4. 新增 AI 审查文档清单 5. 详细格式规范和示例 6. 新增常见问题和术语对照表 --- **维护者**: ARCS SDK 团队 **联系方式**: sdk@listenai.com **最后更新**: 2025-01-14