S_MengZe规范集

版本号规范

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
21
if((((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
2
case 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
#if defined(AC_DDL_TDL_BTIO) || defined(AC_DDL_TDL_BWSC)
#ifndef AC_DDL_AL
……
#endif /*- AC_DDL_AL */
……
#else
……
#endif /*- AC_DDL_TDL_BTIO || AC_DDL_TDL_BWSC */

原码编码

  原码使用ANSI与UTF-8可通用的编码,除中文注释外,禁止出现不通用字符,若自己语言能力足够可全面禁止非通用字符。

头文件宏声明

  所有自定义的头文件均需要进行宏声明,声明格式如下:

1
2
3
4
5
6
#ifndef __TIMER_ATY_H
#define __TIMER_ATY_H
……
#endif /* __TIMER_ATY_H */

/******************************* End Of File *********************************/

运算符优先级

  用括号确定运算符优先级,在不影响可读性的情况下尽量减少编译器自我判断。

MZ_ToolsTree规范

  • V31_210806

视频大小 - 1.01MB