1、TRZNTRZN 嵌入式软件编程规范TRZN项目: Embedded software development领域: SW Engineering文件名称: 嵌入式软件编程规范文件号: SW-00-00-0001版本号: 0.1日期: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 2 of 47 文档修改历史:版本号 日期 修改者及常用邮箱 修改日志0.1 2016-10-28 杨科 根据查阅的相关资料整理,此版本为第一次提交。TRZN项目: Embedded software development领域: SW Engineering文件名称: 嵌入式软件编程规
2、范文件号: SW-00-00-0001版本号: 0.1日期: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 3 of 47 1 文档概述 .41.1 关于本文档 .41.2 参考文献 .42 排版 .53 注释 .104 标识符命名 .195 可读性 .256 变量、结构 .267 宏 .318 函数、过程 .339 可测性 .4110 代码版本管理 .4410.1 代码质量定义 .4410.2 GIT 分支定义 .4410.3 GIT 代码引入规定 .4410.4 GIT 代码 COMMIT 顺序 .4510.5 COMMIT 文件过程中的其他注意事项 .451
3、1 附录 A 推荐编辑器的默认配置修改 .4611.1 KEIL UVISION5 默认配置修改 .46TRZN项目: Embedded software development领域: SW Engineering文件名称: 嵌入式软件编程规范文件号: SW-00-00-0001版本号: 0.1日期: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 4 of 47 1 文档概述1.1 关于本文档 本文档规范了芜湖天人智能有限公司嵌入式软件部软件代码的书写规范和原则。本文档仅供公司内部员工使用。公司机密,严禁外传。本文档中各规则的格式如下:【规则 编号】 规则内容 标
4、记其中标记 的含义如下:(必须) : 表示该条规则是必须遵守的。(建议) : 表示该条规则是建议遵守的。(可选)或没有标记 : 表示该条规则是可选择遵守的。本文档的示例中,如有使用“/”,并非代码注释,而是文档的注释(有可能是文档中对代码注释的解释) 。1.2 参考文献1高质量 C+编程2Effective C+3More Effective C+4C+ Primer 5Thinking in C+ TRZN项目: Embedded software development领域: SW Engineering文件名称: 嵌入式软件编程规范文件号: SW-00-00-0001版本号: 0.1日期
5、: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 5 of 47 2 排版 【规则 2-1】程序块要采用缩进风格编写,缩进的空格数为 4个,对齐使用空格键,不得使用TAB 键。必须嵌入式软件开发的代码编辑器,推荐使用 Keil uVision5,编辑器参数设置见附录 A。 【规则 2-2】相对独立的程序块之间、变量说明之后必须加空行。必须示例:不正确的书写方式:if (!rpr_valid_ni(ni). / program codegRprRepssnInd = gRprSsnDataidx.repssn_index;gRprRepssnNi = gRprSsn
6、Dataidx.ni;正确的书写方式:if (!rpr_valid_ni(ni). / program code/空行gRprRepssnInd = gRprSsnDataidx.repssn_index;gRprRepssnNi = gRprSsnDataidx.ni; 【规则 2-3】较长的语句( 80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。必须示例:gRprPermCountMsg.head.len = RPR_NO7_TO_STAT_PERM_COUNT_LEN +RPR_STAT_SIZE_P
7、ER_FRAM * sizeof( UINT32 );gSysAcbTaskTableframe_id * RPR_STAT_TASK_CHECK_NUMBER + index.nOccupied =rprStatPoiindex.nOccupied;gSysAcbTaskTabletaskno.nDurationTrueOrFalse =SYS_getSccpStatisticState( statItem );gRprReportOrNotFlag = (SYS_MAX_ACT_TASK_NUMBER taskno) 【规则 2-4】循环、判断等语句中若有较长的表达式或语句,则要进行适当的
8、分行,长表达式要在低优先级操作符处划分新行,操作符放在行尾。必须示例:TRZN项目: Embedded software development领域: SW Engineering文件名称: 嵌入式软件编程规范文件号: SW-00-00-0001版本号: 0.1日期: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 6 of 47 if (taskno ),后不应加空格。必须说明:采用这种松散方式编写代码的目的是使代码更加清晰。由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面) 不
9、需要加空格,多重括号间不必加空格,因为在 C/C+语言中括号已经是最清晰的标志了。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。示例:【规则 2-10-1】 逗号、分号只在后面加空格。int a, b, c; 【规则 2-10-2】比较操作符, 赋值操作符“=“、 “+=“,算术操作符 “+“、“%“,逻辑操作符“a *= 2;a = b 2;【规则 2-10-3】“!“、“、“+“、“-“、“ / 内容操作 “*“与内容之间TRZN项目: Embedded software development领域: SW Engine
10、ering文件名称: 嵌入式软件编程规范文件号: SW-00-00-0001版本号: 0.1日期: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 9 of 47 flag = !isEmpty; / 非操作 “!“与内容之间p = / 地址操作 “ / “+“,“-“与内容之间【规则 2-10-4】“-“、“.“前后不加空格。p-id = pid; / “-“指针前后不加空格【规则 2-10-5】if、for、while、switch 等与后面的括号间应加空格,使 if 等关键字更为突出、明显。if (a = b) & (c d)TRZN项目: Embedded
11、software development领域: SW Engineering文件名称: 嵌入式软件编程规范文件号: SW-00-00-0001版本号: 0.1日期: 2016-10-28所属部门: 电控质量管理部仅限项目组内部传阅 Page 10 of 47 3 注释 【规则 3-1】一般情况下,源程序有效注释量必须在20以上(建议20-30%)。必须说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。 【规则 3-2】C代码不得使用 C+的注释语法“/” ,必须使用/*.*/。建议注:本文档的示例中,如有使用“/”,并非代码注释
12、,而是文档的注释(有可能是文档中对代码注释的解释) 。 【规则 3-3】说明性文件(如头文件.h 文件、.inc文件、.def文件、编译说明文件.cfg 等)头部应进行注释,注释必须列出:版权说明、模块名、文件名、作者、内容介绍、修改日志等,头文件的注释中还应有函数功能简要说明。必须头文件模板示例:/* (c) Copyright 2001-2016, TRZN, All Rights Reserved.* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF TRZN, INC.* The copyright notice above does not
13、 evidence any actual or intended* publication of such source code. * Subsystem: XXX* File: XXX_ei.h* Author: Xxx* Description: Template for C header files.* * /其它在头文件可选择的包括的内容 * Others: / 其它内容的说明* Function List: / 主要函数列表,每个函数一行,包含其返回值类型及参数类型。功能说明应当放在函数头注释中* 1. .* History: / 修改历史记录列表,每条修改记录应包括修改日期、修改* / 者及修改内容简述。( 参见底注)* 1. Date:* Author:* Modification:* 2. .*/#ifndef _FILENAME_H#define _FILENAME_H