1、命名规则
风格 | 说明 |
---|---|
unix like风格 | 单词用小写字母,每个单词直接用下划线„_‟分割,例如text_mutex,kernel_text_address。 |
Windows风格 | 大小写字母混用,单词连在一起,每个单词首字母大写。 |
匈牙利命名法 | 用这种方法命名的变量显示了其数据类型。例如u32Step,u8Number。 |
代码和文件都采用大驼峰式
2、变量,结构体名规则
一级 | 二级 | 三级 | 名称 | 后缀 | 备注 |
---|---|---|---|---|---|
g_ | XxxXxx | 全局变量,函数外部定义,作用域整个工程 | |||
cg_ | XxxXxx | 全局常量,函数外部定义,作用域整个工程 | |||
sg_ | XxxXxx | 静态全局变量,函数外部定义,作用域当前文件 | |||
csg_ | XxxXxx | 静态全局常量,函数外部定义,作用域当前文件 | |||
c_ | XxxXxx | 局部常量,函数内部定义,作用域当前函数 | |||
s_ | XxxXxx | 局部静态变量,函数内部定义,作用域当前函数 | |||
p | XxxXxx | 指针前缀 | |||
a | XxxXxx | 数组前缀 | |||
m_ | XxxXxx | 结构体成员前缀 | |||
bn | XxxXxx | bit变量前缀;b,b2,b3…;分别代表占位bit数 | |||
u8,u16,u32… | XxxXxx | 基本无符号数据变量 | |||
s8,s16,s32… | XxxXxx | 基本有符号数据变量 | |||
uv8,uv16,uv32… | XxxXxx | 基本无符号volatile数据变量 | |||
sv8,sv8,sv32… | XxxXxx | 基本有符号volatile数据变量 | |||
f,fv | XxxXxx | float / volatile float数据变量 | |||
d,dv | XxxXxx | double / volatile double数据变量 | |||
t | XxxXxx | 结构体变量 | |||
uni | XxxXxx | 联合体变量 | |||
e | XxxXxx | 枚举变量 | |||
func | XxxXxx | 函数指针变量 | |||
STRU_;UNI_;ENU_ | XxxXxx | 结构体、联合体、枚举的typedef类型定义 | |||
e_ | XxxXxx | 枚举体成员 |
示例
uint32_t g_u32CntAck;
static uint8_t sg_au8TxBuf[100];
uint8_t *pu8Tx = sg_au8TxBuf;
/**
* @brief 传输项
*/
typedef struct tag_STRU_TransItem
{
STRU_CntSListNode m_tCSListNode; ///< 链表节点
STRU_FrmHdr m_tFrmHdr; ///< 帧头结构
} STRU_TransItem;
/**
* @brief 帧类型定义
*/
typedef enum tag_ENU_FrmType
{
e_FrmTypeNone = 0x00, ///< 无效
e_FrmTypeAck = 0x01, ///< 应答帧
e_FrmTypeSeqRst = 0x02, ///< 复位帧
} ENU_FrmType;
2、函数
2.1、 函数命名规则
序号 | 说明 | 字体 | 选择 | 备注 |
---|---|---|---|---|
1 | 模块名称 | 大驼峰 | 必选 | 以最直观模式给用户区分不同的模块函数,采用模块英文名或简写 |
2 | 函数动作 | 大驼峰 | 必选 | 动作英文名称或简写,最多2个单词 |
3 | 函数对象 | 大驼峰 | 可选 | 对象英文名称或简写,最多2个单词 |
4 | 函数范围 | 大驼峰 | 可选 | 范围英文名称或简写,最多2个单词 |
示例
①文件名为os_msg.c
void OS_MsgPoolInit (OS_ERR *p_err)
3、宏命名规则
序号 | 说明 | 字体 | 选择 | 备注 |
---|---|---|---|---|
1 | 模块名称 | 大写 | 必选 | 以最直观模式给用户区分不同的模块函数,采用模块英文名或简写 |
2 | 下划线 | 必选 | 间隔符 | |
3 | 功能名称 | 大写 | 必选 | 功能英文名称或简写,最多2个单词 |
4 | 下划线 | 必选 | 间隔符 | |
5 | 修饰词 | 大写 | 必选 | 修饰词英文名称或简写,最多2个单词 |
示例
#define FRM_FLAG_INITED (((uint32_t)1) << 0) ///< 0:未初始化;1:已初始化
#define FRM_FLAG_TX_REQ (((uint32_t)1) << 8) ///< 1:正在请求tx
#define FRM_FLAG_NEED_ACK (((uint32_t)1) << 9) ///< 需求ack
#define FRM_FLAG_TARNS_CTRL_FRM (((uint32_t)1) << 10) ///< 需中间插入tx ctrl帧
#define FRM_FLAG_RETRANS (((uint32_t)1) << 11) ///< 处于重传状态
#define FRM_FLAG_SEQ_RET (((uint32_t)1) << 12) ///< 需中间插入tx rst帧
#define FRM_FLAG_TXING (((uint32_t)1) << 13) ///< 处于tx传输状态
4、文件命名规则
序号 | 说明 | 字体 | 选择 | 备注 |
---|---|---|---|---|
1 | 模块名称 | 大驼峰 | 必选 | 采用模块英文名称或简写 |
2 | 分类名称 | 大驼峰 | 可选 | 分类英文名称或简写 |
3 | 修饰词 | 大驼峰 | 可选 | 修饰词英文名称或简写 |
示例
UartTransLayer.c
UartPhyLayer.c
UartPhyLayerConfig.h
模块 | 文件名 | 说明 |
---|---|---|
液晶 | Lcd.c | 液晶初始化,字符、汉字和图片显示实现 |
Lcd.h | 对外公开的接口申明&定义 | |
LcdPrivate.h | 非对外公开的私有申明&定义 | |
LcdCfg.h | 对功能模块的配置定义 | |
LcdFont.c | 液晶自定义字库 | |
LcdFont.h | ||
按键 | Key.c | 按键初始化,动作定义等 |
Key.h | ||
数码管 | LedSeg.c | 数码管初始化,数字显示灯 |
LedSeg.h |
5、注释
5.1、文件描述区
/**
* @file main.c
* @author xxx(xxxxxxx@xxxxxxxx.com)
* @version 1.0
* @date 2021-04-01
* @brief 主函数入口
*
* @copyright Copyright (c) 2021 XXXX公司
*
* @par 修改日志:
* <table>
* <tr><th>Date <th>Version <th>Author <th>Description
* <tr><td>2021-04-01 <td>1.0 <td>xxx <td>内容
* </table>
*/
5.2、函数注释
/**
* @brief 函数功能描述
* @param[in] pu8Buf 缓存地址
* @param[in] u32Size 缓存大小
* @return int 实际成功操作的数据量
*/
int PlatformOledWrite(uint8_t *pu8Buf, uint32_t u32Size);