




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电工与电子创新基地培训教材单片机软件设计规范1 学习软件设计规范的目的学习软件设计规范的目的就是编写高质量的软件,降低编码阶段的错误率。设计一个高质量的软件有以下几点要求:1) 软件设计模块化,具有好的可重用性和可移植性。2) 程序代码干净整洁,具有好的可维护性。3) 不使用晦涩的语句,简洁易懂,具有好的易懂性。4) 代码设计简明扼要,提高程序的运行效率以及程序所占用的内存空间。5) 使用充足的程序说明,程序具有好的可读性。综上所述:可重用性、可移植性、可维护性、易懂性、高效率性以及可读性是衡量一个软件质量基本要求。 2 排版规范1 程序块采用缩进风格编写,缩进为4个空格位,通常采用TAB键来进行缩进,也可直接敲入4个空格位,但排版不能混合使用空格和TAB键。2 函数体的开始,类的定义,结构的定义,if、for、do、while、switch及case语句中的程序都应采用缩进方式,符号与独占一行并且位于同一列。示例:如下例子不符合规范if() 应如下书写if()3 相对独立的程序块之间、变量说明之后必须加空行。示例:如下例子不符合规范if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;应如下书写if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;4 一行最多写一条语句。示例:如下例子不符合规范i+ ; j+ ;应如下书写i+;j+;5 不同类型的操作符混合使用时,使用括号给出优先级。示例:如下例子不符合规范if( i!=1 | j!=2 & k!=3 )应如下书写if( (i!=1) | ( (j!=2) & (k!=3) ) )6 较长的语句(80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。示例(书写正确):perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT_SIZE_PER_FRAM * sizeof( _UL );7 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如),后不应加空格。说明:采用这种松散方式编写代码的目的是使代码更加清晰。示例:(1) 逗号、分号只在后面加空格。int a, b, c; (2)比较操作符, 赋值操作符=、 +=,算术操作符+、%,逻辑操作符&、&,位域操作符= MAX_TIME_VALUE) a = b + c;a *= 2;a = b 2;(3)!、+、-、&(地址运算符)等单目操作符前后不加空格。*p = a; / 内容操作*与内容之间flag = !isEmpty; / 非操作!与内容之间p = &mem; / 地址操作& 与内容之间i+; / +,-与内容之间(4)-、.前后不加空格。p-id = pid; / -指针前后不加空格(5) if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。if (a = b & c d)3 注释规范1 一般情况下,源程序有效注释量必须在20以上说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。2 说明性文件(如头文件.h文件、.inc文件)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、头文件的注释中还应有函数功能简要说明。示例:下面为一头文件的头部注释的模板/* Copyright (C), 2005, HUST File name: test.h/ 文件名 Author: Version: Date: / 作者、版本及完成日期 Description: / 用于详细说明此程序文件完成的主要功能,与其他模块 / 或函数的接口,输出值、取值范围、含义及参数间的控 / 制、顺序、独立或依赖等关系 Others: / 其它内容的说明 Function List: / 主要函数列表,每条记录应包括函数名及功能简要说明*/3 源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能等。示例:下面为一源文件的段头注释的模板/* Copyright (C), 2005, HUST FileName: test.c Author: Version : Date: Description: / 模块描述 Version: / 版本信息 Function List: / 主要函数及其功能 1. -*/4 函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值等。示例:下面为一函数头部注释的模板/* Function: / 函数名称 Description: / 函数功能、性能等的描述 Input: / 输入参数说明,包括每个参数的作 / 用、取值说明及参数间关系。 Output: / 对输出参数的说明。 Return: / 函数返回值的说明 Others: / 其它说明*/5 注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。示例:如下例子不符合规范。例1:/* get replicate sub system index and net indicator */repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;例2:repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;/* get replicate sub system index and net indicator */应如下书写/* get replicate sub system index and net indicator */repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;6 注释与所描述内容进行同样的缩排。这样可使程序排版整齐,并方便注释的阅读与理解。示例:如下例子,排版不整齐,阅读稍感不方便。void example_fun( void )/* code one comments */ CodeBlock One /* code two comments */ CodeBlock Two应改为如下布局。void example_fun( void ) /* code one comments */ CodeBlock One /* code two comments */ CodeBlock Two7 将注释与其上面的代码用空行隔开。示例:如下例子,显得代码过于紧凑。/* code one comments */program code one/* code two comments */program code two应如下书写/* code one comments */program code one/* code two comments */program code two4 高效率代码设计规范代码效率分为全局效率、局部效率、时间效率及空间效率。全局效率是站在整个系统的角度上的系统效率;局部效率是站在模块或函数角度上的效率;时间效率是程序处理输入任务所需的时间长短;空间效率是程序所需内存空间,如机器代码空间大小、数据空间大小、栈空间大小等。1 仔细分析有关算法,并进行优化。(1) 用移位来代替2的次幂的乘除法示例:(A/D采样时的均值滤波:每次采样16个点,求16个点的均值)以下代码不规范:sum /= 16 ;应书写为:sum = 4 ;(2) 用减法代替任意的除法示例:(在LED/LCD显示中,常需要将一个无符号整型数的个、十、百位取出来)以下代码不规范:temprature = 253 ;led1 = temperature / 100 ;temperature %= 100 ;led2 = temperature / 10 ;temperature %= 10 ;led3 = temperature ;应书写为:temprature = 253 ;led1=led2=led3=0;while(temperature100)led1+;temperaturn -= 100 ;(3) 用定点数代替浮点数的运算说明:用定点数代替浮点数的基本原则就是单元变换。比如,要对某个电压值进行运算处理,电压的具体值是用浮点数变量voltage_f来表示的,单位是V,精度是mV ,即当voltage_f 1.234 时,则表示当前电压是1.234V,经过单位变换,将最小单位换成mV就可以将浮点换成定点来进行运算,整型变量voltage_i来表示电压,对应于之前的1.234V,voltage_i 1234 ;2 在多重循环中,应将最忙的循环放在最内层。说明:减少CPU切入循环层的次数。示例:如下代码效率不高。for (row = 0; row 100; row+) for (col = 0; col 5; col+) sum += arowcol; 可以改为如下方式,以提高效率。for (col = 0; col 5; col+) for (row = 0; row 100; row+) sum += arowcol; 3 避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。说明:目的是减少判断次数。循环体中的判断语句是否可以移到循环体外,要视程序的具体情况而言,一般情况,与循环变量无关的判断语句可以移到循环体外,而有关的则不可以。示例:如下代码效率稍低。for (ind = 0; ind MAX_RECT_NUMBER; ind+) if (data_type = RECT_AREA) area_sum += rect_areaind; else rect_length_sum += rectind.length; rect_width_sum += rectind.width; 因为判断语句与循环变量无关,故可如下改进,以减少判断次数。if (data_type = RECT_AREA) for (ind = 0; ind MAX_RECT_NUMBER; ind+) area_sum += rect_areaind; else for (ind = 0; ind MAX_RECT_NUMBER; ind+) rect_length_sum += rectind.length; rect_width_sum += rectind.width; 4 编程时,要随时留心代码效率;优化代码时,要考虑周全。5 不应花过多的时间拼命地提高调用不很频繁的函数代码效率。6 命名规范1 自己特有的命名风格,要自始至终保持一致,不可来回变化。2 对于变量命名,禁止取单个字符(如i、j、k.),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。3 变量的命名规范。变量的命名规范可参照匈牙利命名法:作用范围域前缀 + 前缀 + 基本类型 + 变量名其中前缀是可选项,以小写字母表示基本类型是必选项,以小写字母表示变量名是必选项,可多个单词(或缩写)合在一起,每个单词首字母大写。示例:g_pCounter: g是前缀,代表是gobal变量,p表示类型是指针,Couter是变量名。基本类型列表:基本类型意义举例cChar 字符cMyChari或nIntger 整数nTestNumberuunsigned integer 无符号整数uCountulunsigned Long无符号长整数ulTimewword 字wParadwDouble Word双字dwParallong 长整型lParaffloat 浮点数fTotalsString 字符串sTemp4 宏和常量的命名宏和常量的命名规则:单词的字母全部大写,各单词之间用下划线隔开。命名举例:#defineMAX_SLOT_NUM8const int MAX_ARRAY5 函数的命名单词首字母为大写,其余均为小写,单词之间不用下划线。函数名应以一个动词开头。命名举例:void PerformSelfTest(void) ;void GetKeyNum(int* nKey);7 提高代码正确性设计规范1 严禁使用未经初始化的变量。引用未经初始化的变量可能会产生不可预知的后果,特别是引用未经初始化的指针经常会导致系统崩溃,需特别注意。声明变量的同时初始化,除了能防止引用未经初始化的变量外,还可能生成更高效的机器代码。2 注意变量的有效取值范围,防止表达式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江国企招聘2025湖州吴城数字能源有限公司招聘2人笔试参考题库附带答案详解
- 2025年电气自动化控制工程师综合考核试卷及答案
- 江西省金融控股集团有限公司2025届校园招聘11人笔试参考题库附带答案详解
- 药品生产质量管理体系完善
- 2025年中国海关博物馆招聘笔试历年参考题库附带答案详解
- 熔化焊接与热切割理论考试题库及答案
- 3.讲究礼仪教学设计小学综合实践活动皖教版五年级上册-皖教版
- 2025年保密知识竞赛考试题库及答案
- (2025年)《公司法》知识竞赛题库(+答案)
- 2025年自行车租赁服务合同书
- 士林变频器说明书SL
- 博雅汉语准中级加速篇1
- 第二章第一节 遗传论与环境论心理学课件
- 九年级物理上册《第十三章 内能与热机》单元检测卷及答案(沪科版)
- 能源化学与能源化工概论-第一章 能源简介
- GB/T 16866-2006铜及铜合金无缝管材外形尺寸及允许偏差
- FZ/T 52058-2021低熔点聚乳酸(LMPLA)/聚乳酸(PLA)复合短纤维
- 2023年华中师范大学研究生入学考试试题汉语言文字专业语言及应用语言学对外汉语教学专业试题
- 量子信息与量子计算课件
- 高中生职业生涯规划主题班会课件
- 综合实践课《绳结》教学设计
评论
0/150
提交评论