版本号规范
V1_01_200101
- V1:颠覆性大版本
- 01:小改动,小功能、UI等变动、更新
- 200101:最后修改确定日期“2位年2位月2位日”
项目命名规范
MZ_NAME_SETTING_BV
- MZ:责任命名
- NAME:项目名
- SETTING:配置等区分信息
- BV:大版本区分(若SETTING可明显区分则此项可忽略)
SCH/PCB命名规范
- PR1
Power部分的电阻R1
- APR1(多张图纸时)
Abc.sch中Power部分的R1
- Via大小:
0.3-0.6mm
0.4-0.8mm
15-30mil
20-40mil
25-50mil
SCH参数规范
- 电阻
101J/0805 或 1001F/0805
(F及以内四位,J及以外三位。)
(后边封装在图中标出 0603 Main 即可省略所有的0603封装说明。)
(直插等特殊电阻标出W数及特殊点。)
- 电容
101K/16V/0805
(与电阻类似。)
- 其他
标出特点鲜明的参数或型号。
- 精度表
M:20%
K:10%
J:5%;
G:2%
F:1%
D:0.5%
C:0.2%
B:0.1%
W:0.05%
U:0.02%
H:0.01%
Y:0.005%
X:0.002%
E:0.001%
C等硬语言代码规范 - 改自驼峰命名法
- 宏定义:ABC_DEF
- 函数名/结构体:AbcDef_Ghi
- 变量名:abcDef_Ghi
- 临时变量:tempAbc_Ghi或tAbc_Ghi
- 计数变量:counterAbc_Ghi
- 计数临时变量:a_i/a_j/a_k或a_x/a_y/a_z
temp_uint8
temp_uint16
temp_uint32
temp_uint64
temp_f // float
temp_d // double
temp_l // long
temp_ll // longlong
temp_fg // 同作用域无含义临时变量数组与另一相同非数组临时变量重名时
// 同时同作用域有多个相同临时变量时用数组
temp_struct // 结构体临时变量
tempName // 非强烈含义的临时变量。强烈含义变量用含义命名,不加temp
tempName_f // 同作用域同含义同强烈等级临时变量的不同类型
// 非注释不出现单独temp、Temp、Temperature,单独温度变量用temperature
temp - temporary
Temp - temperature
C++/QT/JS等软语言代码规范
- 宏定义:ABC_DEF
- 函数名/结构体/类名:AbcDef_Ghi
- 变量名:abcDef_Ghi
- 临时变量:tempAbc_Ghi或tAbc_Ghi
- 计数临时变量:a_i/a_j/a_k或a_x/a_y/a_z
版本更新Log:Aversion规范
MZ_.Aversion
- 项目名_版本号1(新)
- 项目名_版本号2(旧)
- V1_01_200101
- 修改内容:
- 1、……
- 2、……
- 已知问题:
- 1、……
- 2、……
- V1_02_200102
- 修改内容:
- 1、……
- 2、……
- 已知问题:
- 1、……
- 2、……
代码规范
长语句
超出80字符(标准Notepad++页)的语句尽可能的换行,使用缩进排版代码使代码结构清晰可读。
换行时操作符放于新行之首。
分割
分割形式要统一,推荐使用/*----------*/
整行共80个字符分割特征区分度较大的块代码,前端与分割代码缩进对齐。若代码结构可视性较强,可用空行或双空行替代分割。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21if((((gooseNeckState & 0x0F) == NORMAL) || ((gooseNeckState & 0x0F) == SHIELD)
|| ((gooseNeckState & 0X0F) == HSHIELDC) || ((gooseNeckState & 0x0F) == HSHIELDH))
&& ((((gooseNeckState>>4) & 0x0F) == NORMAL) || (((gooseNeckState>>4) & 0X0F) == SHIELD)
|| (((gooseNeckState>>4) & 0x0F) == HSHIELDC) || (((gooseNeckState>>4) & 0x0F) == HSHIELDH)))
{
standbyValue&=GN_S;
add_i++;
}
/*------------------------------------------------------------------------------------------*/
if((hydrocarbonDetectState == NORMAL) || (hydrocarbonDetectState == SHIELD))
oilingValue|=HD_O;
standbyValue&=HD_S;
/*------------------------------------------------------------------------------------------*/
if((combustibleGasState == NORMAL) || (combustibleGasState == SHIELD))
oilingValue|=CG_O;
standbyValue&=CG_S;
/*------------------------------------------------------------------------------------------*/
if((carStopperState == ABNORMAL) || (carStopperState == SHIELD))
oilingValue|=CS_O;
if((carStopperState == NORMAL) || (carStopperState == SHIELD))
standbyValue&=CS_S;
多条语句
一行内只允许出现至多一个分号,case语句若后面语句较短可加上break;
共占一行。1
2case 0: add_i++;break;
default :break;
条件循环结构
if、for、while与do……while必须独占一行,if、for、while语句后若只有一条语句不加花括号,do……while必须加花括号。
花括号位置
硬语言花括号独占一行并与块头对齐,软语言开始花括号放于块头末尾,之间插入一个空格,结束花括号与块头对齐。1
2
3
4
5
6
7
8
9
10/*- Hardware */
if(add_i == add_j)
{
add_i += add_j;
}
/*- Software */
if(add_i == add_j) {
add_i += add_j;
}
文件注释
同类项目内的文件注释条目必须相同。
文件注释至少要有顶底注释框,条目至少包含说明、版权声明、版本号加修改日志等。
具体风格可根据工具或自己喜好而定,如本人采用Doxygen工具,示例如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58/**
*******************************************************************************
* @mainpage ATYSTMLIB_HAL
* @section Project
* - ATYSTMLIB_HAL
*
* @section Author
* - ATY
*
* @section Copyright
* - Copyright © 2020 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
* <a href="https://mengze.top/MZ-ATY_VCJS">
* https://mengze.top/MZ-ATY_VCJS</a>
* - CC 4.0 BY-NC-SA -
* <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
* https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
* - Your use will be deemed to have accepted the terms of this statement.
* - 您的使用行为将视为已接受本声明各项条款。
*
* @section Descriptions
* - Familiar functions for STM32F1 series
*******************************************************************************
*/
/**
*******************************************************************************
* @file TIMER_ATY.h
* @par Project
* - ATYSTMLIB_HAL
*
* @author
* - ATY
*
* @copyright
* - Copyright © 2020 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
* <a href="https://mengze.top/MZ-ATY_VCJS">
* https://mengze.top/MZ-ATY_VCJS</a>
* - CC 4.0 BY-NC-SA -
* <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
* https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
* - Your use will be deemed to have accepted the terms of this statement.
* - 您的使用行为将视为已接受本声明各项条款。
*
* @par Descriptions
* - Familiar functions of CRC for all codes
*
* @par Update
* - 1_01_200317 > ATY
* -# Preliminary version, first Release
* - 1_02_200318 > ATY
* -# Add Conditional Compilation
* -# Add user port
*******************************************************************************
*/
函数注释
同类项目内的注释风格必须相同,函数头注释条目可根据实际情况而定。
推荐函数头注释包含条目:函数功能说明、参数、返回值、注意事项等说明。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26/**
* @brief Delay n us with TimerN
* @param us - us
* @brief Commonly used in RTOS microsecond delay;
* F1 -> 72Mhz -> Prescaler=71 -> 1us per count,
* Prescaler=719 -> 10us per count,
* Prescaler=7199 -> 100us per count,
* so Period init number need to be larger than max us,
* and Prescaler init must be 71 if use this type delay function
* @warning Be easily disturbed by other interrupt;
*/
/**
* @brief Set rtc date and time
* @param year - Year
* @param month - Month
* @param date - Date
* @param hours - Hours
* @param minutes - Minutes
* @param seconds - Seconds
*/
/**
* @brief Delay n s in changing RCC clock
* @param s - s
*/
代码注释
在不影响函数可读性的情况下,尽量在说明语句前一行同缩进添加注释。
如果上述条件不成立时,在语句尾部至少2个空格后添加注释。
至少在一个结构内(如一个函数内)的行尾注释前端对齐。
同类项目内的注释风格相同,个人注释风格示例:/*- Annotation */
(加 -
是为了区分个人注释与库内注释)。
注释尽量表达出代码的深层含义,避免复刻注释,示例:1
2
3
4
5/*- If add_i is true */ //避免复刻注释
if(add_i)
/*- If machine start add then add_i is not empty */
if(add_i)
宏定义注释
具有包含结构的宏定义要在尾部添加包含注释,因为宏定义一般不缩进,如:1
2
3
4
5
6
7
8
……
……
……
原码编码
原码使用ANSI与UTF-8可通用的编码,除中文注释外,禁止出现不通用字符,若自己语言能力足够可全面禁止非通用字符。
头文件宏声明
所有自定义的头文件均需要进行宏声明,声明格式如下:1
2
3
4
5
6
……
/******************************* End Of File *********************************/
运算符优先级
用括号确定运算符优先级,在不影响可读性的情况下尽量减少编译器自我判断。
MZ_ToolsTree规范
- V31_210806
视频大小 - 1.01MB