按嵌入式 C 语言编码规范编写、重构、审查和整理固件代码。用于 STM32、RTOS、BSP、HAL、驱动、服务层、中间件等场景下的 `.c` 文件与相关 `.h` 文件工作,特别适用于用户请求提到C语言编码规范、命名统一、注释补齐、大括号风格、返回值检查、内存安全、32/64位可移植性、静态检查或代码风格整改时。
按嵌入式规范处理项目自有嵌入式 C 代码,并尽量控制改动范围,避免产生无意义的大 diff。
Drivers/、03_Os/、外部中间件,以及 Core/ 下大多数 STM32Cube 生成文件视为自动生成或上游代码。.c 实现文件为中心"的规范:所有 MUST 规则默认对 .c 生效;只有在确实修改接口时,才把命名、注释、宏和接口相关规则同步应用到 .h。snake_caselowerCamelCaseg_ + lowerCamelCaseUPPER_SNAKE_CASEtypedef 后的抽象类型名:PascalCase#include、#error 等确有必要时可例外。else、else if 或 do { } while (0) 的尾部 whileif、else、for、while、do、switch 一律显式使用大括号,即使只有一条语句或空循环体。switch 中的 case 和 default 相对 switch 缩进一级,并显式写出 break、return 或说明型 fallthrough。.c 文件时,优先采用以下组织顺序:#includestatic 变量static 函数.c 或 .h 文件时必须使用以下文件头注释模板(替换对应字段):
/******************************************************************************
* @file <filename>
*
* @par dependencies
*
* @author <Author Name>
*
* @brief <Brief description>
*
* @version V1.0 <YYYY-M-D>
*
* @note 1 tab == 4 spaces!
*****************************************************************************/
/**
* @brief
*
* @param[in] :
*
* @param[out] :
*
* @return
*
* */
/**
* This is a comment
**/
assert 校验外部输入;assert 仅用于内部不变量。cleanup: 收口。static inline 替代函数式宏;若必须使用宏,必须完整加括号,多语句宏必须写成 do { ... } while (0)。static。对文件级或全局可变状态使用 g_ 前缀。uintptr_t 或字节指针;不要通过 uint32_t 传递或截断指针。size_t;若必须缩窄到 32 位,先做显式边界检查。printf;同时避免打印敏感数据。size_t 缩窄static 的新增全局状态.agents/skills/embedded-c-coding-standard-zh/references/embedded-c-rules-zh.md。