单片机编程规则.pdf

上传人:asd****56 文档编号:70344437 上传时间:2023-01-19 格式:PDF 页数:16 大小:289.92KB
返回 下载 相关 举报
单片机编程规则.pdf_第1页
第1页 / 共16页
单片机编程规则.pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《单片机编程规则.pdf》由会员分享,可在线阅读,更多相关《单片机编程规则.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 导航硬件 导航硬件 单片机编程规范 单片机编程规范 导航硬件 单片机编程规则 目 录 目 录 1 前言.4 1.1 文档用途.4 1.2 阅读对象.4 1.3 概述.4 2 文件结构.4 2.1 版权和版本的声明.4 2.2 头文件的结构.5 2.3 定义文件的结构.5 2.4 main()函数.6 2.5 全局变量.6 2.6 常量.7 3 程序版式.7 3.1 函数接口说明.7 3.2 函数命名规则.8 3.3 变量命名规则.9 3.4 空行.9 3.5 代码行.10 3.6 代码行内的空格.11 3.7 对齐.11 3.8 长行拆分.12 3.9 注释.13 4 表达式和基本语句.13

2、 4.1 运算符的优先级.13 4.2 复合表达式.13 4.3 if 语句.14 4.3.1 布尔变量与零值比较.14 4.3.2 整型变量与零值比较.14 4.3.3 浮点变量与零值比较.14 4.3.4 指针变量与零值比较.15 4.4 for 语句的循环控制变量.15 4.5 switch 语句.15 4.6 goto 语句.16 2导航硬件 单片机编程规则 版本历史 编制 编制日期 版本 描述 审核 审核日期 赵颖慧 2008.7.2 V 1.0.0草稿 3导航硬件 单片机编程规则 1 前言前言 1.1 文档用途文档用途 本文规定了车载导航系统单片机开发过程中的编程规范,包括数据定义

3、规则、书写规范、注意事项等准则,所有本项目的单片机开发都要严格遵守本规范。1.2 阅读对象阅读对象 本文档的阅读对象如下:?单片机程序设计工程师?单片机程序开发工程师?单片机程序测试工程师?其它相关人员 1.3 概述概述 本文档包括如下几部分内容:变量命名规则、程序书写规范、以及一些注意事项等内容。上述内容分为 4 章叙述。第 2 章 文件结构:叙述程序文件的结构及各部分的内容,版权和版本的声明方法和格式。第 3 章 程序版式:叙述程序的书写规范。第 4 章 表达式和基本语句:叙述表达式和基本语句的使用、书写规范。2 文件结构文件结构 2.1 版权和版本的声明版权和版本的声明 版权和版本的声明

4、位于头文件和定义文件的开头,使用中文书写,主要内容有:(1)版权信息(2)文件名称,标识符,摘要(3)当前版本号,作者/修改者,完成日期(4)版本历史信息 4导航硬件 单片机编程规则/*Copyright(c)2006,长春一汽启明公司*All rights reserved.*文件名称:/当前文件的名称*文件标识:/目前什么也不填,空出*摘要:/简要描述本文件的内容*其它说明:/其它内容的说明*当前版本:/输入当前版本 例如:V1.0.02*作 者:/输入作者名字*完成日期:/输入完成日期,例如:2000 年 2 月 25 日*修改记录 1:/修改历史记录,包括修改日期、修改者及修改内容*修

5、改日期:*版 本 号:*修 改 人:*修改内容:*修改记录 2:*/2-1-1 版权和版本的声明格式 版本标识:采用.来命名自己程序的编号。主版本号为V1,次版本号为0,修订号为00到99,每修改一次程序修订号加1。2.2 头文件的结构头文件的结构 头文件由三部分内容组成:1)头文件开头处的版权和版本声明。2)预处理块。3)函数声明等。【规则2-2-1】【规则2-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif 结构产生预处理块。【规则2-2-2】【规则2-2-2】用#include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。【规则2-2-3】【规

6、则2-2-3】用#include“filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。【建议2-2-4】【建议2-2-4】头文件中只存放“声明”而不存放“定义”2.3 定义文件的结构定义文件的结构 定义文件有三部分内容:1)定义文件开头处的版权和版本声明。5导航硬件 单片机编程规则 2)对一些头文件的引用。3)程序的实现体(包括数据和代码)。2.4 main()函数()函数【规则2-4-1】【规则2-4-1】main()函数中尽量只出现函数调用。void Dosomething(void)if(condition)./program code else ./p

7、rogram code void main(void)Dosomething();void main(void)if(condition)./program code else ./program code 2-4-1 风格良好的代码行 2-4-2 风格不良的代码行 2.5 全局变量全局变量【规则 2-5-1】【规则 2-5-1】只允许数组类型的全局变量在定义后直接赋初值,其他类型的全局变量定义 后,调用赋初值函数进行初始化,将赋初值函数统一命名为 init_Global_Variable()。【规则2-5-2】【规则2-5-2】全局变量名以g_ 开头,g_ 后跟着变量类型的缩写。常用变量类型

8、缩写列表如下:i :short int(2字节)f :float d :double c :char(1字节)uc :unsigned char 或 BYTE(1字节)l :long(4字节)p :pointer b :BOOL n :unsigned short int(2字节)dw/ul:DWORD或 unsigned long(4字节)a :数组,array of TYPE str :字符串 6导航硬件 单片机编程规则 t :结构类型struct u :联合类型union e :枚举类型enum bs :位域/位段结构类型 struct bits bt :位段类型内的变量bit 变量名放

9、在数据类型的缩写,第一个字母大写其他字母小写,但有些变量名是几个英文的缩写,要全部大写。byte g_ucStatus3=0 x11,0 x12,0 x13;/数组在定义后直接赋初值 byte g_ucRead;/在 init_Globalvariable()函数中赋初值 byte g_ucSPI;/SPI全部大写 word g_wWrite;void init_Global_Variable(void);void init_Global_Variable(void)g_ucRead=0;g_wWrite=0;g_ucSPI =0;2.6 常量常量【规则 2-6-1】【规则 2-6-1】常量名

10、全部使用大写字母。【规则2-6-2】【规则2-6-2】需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。【规则2-6-3】【规则2-6-3】在C+程序中只使用const 常量而不使用宏常量,即const 常量完全取代宏常量。3 程序版式程序版式 3.1 函数接口说明函数接口说明【规则 3-1-1】【规则 3-1-1】每个函数的定义前面都要加上函数的接口说明,具体说明格式为/*|函数名称:|函数功能:|输入参数:|输出参数:|返 回 值:|7导航硬件 单片机编程规则|其它说明:|*/例如:void WriteTi

11、me(BYTE ucMinute)函数 /*|函数名称:存储时间(WriteTime)|函数功能:用于存储时间|输入参数:BYTE*pucMinute|输出参数:无|返回值:0-成功;|1-失败;|其他说明:|*/3.2 函数命名规则函数命名规则【规则3-2-1】【规则3-2-1】函数名的首字母大写。例如:void Draw(void);/函数名 void SetValue(int value);/函数名【规则3-2-2】【规则3-2-2】用正确的反义词组命名具有互斥意义的函数。例如:int SetValue();int GetValue();一些在软件中常用的反义词组。add/remove;

12、begin/end ;create/destroy ;insert/delete ;first/last ;get/release;increment/decrement ;put/get ;add/delete ;lock/unlock;open/close ;min/max ;old/new ;start/stop ;next/previous ;source/target;show/hide ;send/receive;source/destination ;cut/paste ;up/down【规则3-2-3】【规则3-2-3】程序中不要出现仅靠大小写区分的函数。例如:void foo

13、(int x);/函数foo 与FOO 容易混淆 void FOO(float x);【规则3-2-4】【规则3-2-4】规定如下常用函数名的缩写:常用词 缩写 常用词 缩写 Argument Arg Maximum Max Buffer Buf Message Msg Clear Clr Minimum Min Clock Clk Multiplex Mux Compare Cmp Operating System OS Configuration Cfg Overflow Ovf Context Ctx Parameter Param 8导航硬件 单片机编程规则 Delay Dly Poi

14、nter Ptr Device Dev Previous Prev Disable Dis Priority Prio Display Disp Read Rd Enable En Ready Rdy Error Err Register Reg Function Fnct Schedule Sched Flag Flg Semaphore Sem Hexadecimal Hex Stack Stk High Priority Task HPT Synchronize Sync I/O System IOS Timer Tmr Initialize Init Trigger Trig Mail

15、box Mbox Write Wr Manager Mgr 3.3 变量命名规则变量命名规则【规则3-3-1】【规则3-3-1】程序中不要出现仅靠大小写区分的相似的变量。例如:int x,X;/变量x 与X 容易混淆【规则3-3-2】【规则3-3-2】用正确的反义词组命名具有互斥意义的变量。例如:int minValue;int maxValue;【规则3-3-3】【规则3-3-3】程序中不要出现变量名完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。【建议3-3-4】【建议3-3-4】尽量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的

16、确需要编号。【规则3-3-5】【规则3-3-5】使用一致的前缀来区分变量的作用域。变量作用域前缀规范如下:g_ :全局变量 s_ :模块内静态变量 m_ :类的数据成员 空 :局部变量不加范围前缀【规则3-3-6】【规则3-3-6】完整的变量名应由前缀+变量名主体组成,变量名的主体应当使用“名词”或者“形容词名词”,且首字母必须大写。各种前缀字符可能组合使用,在这种情况下,各前缀顺序为:变量作用域前缀、变量类型前缀。例如:float g_fValue;/类型为浮点数的全局变量 3.4 空行空行【规则3-4-1】【规则3-4-1】在每个函数定义结束之后都要加空行。【规则3-4-2】【规则3-4-

17、2】在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行 9导航硬件 单片机编程规则 分隔。/空行 void Function1(.)./空行 void Function2(.)./空行 void Function3(.)./空行 while(condition)statement1;/空行 if(condition)statement2;else statement3;/空行 statement4;3-4-1 函数之间的空行 3-4-2 函数内部的空行 3.5 代码行代码行【规则3-5-1】【规则3-5-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易

18、阅读,并且方便于写注释。【规则3-5-2】【规则3-5-2】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加。这样可以防止书写失误。int width;/宽度 int height;/高度 int depth;/深度 int width,height,depth;/宽度高度深度 x=a+b;y=c+d;z=e+f;X a+b;y=c+d;z=e+f;if(width height)dosomething();if(width=”、“=”、“+”、“*”、“%”、“&”、“|”、“”这类操作符前后不加空格。void Func1(int x,int y

19、,int z);/良好的风格 void Func1(int x,int y,int z);/不良的风格 if(year=2000)/良好的风格 if(year=2000)/不良的风格 if(a=b)&(c=b&c=d)/不良的风格 for(i=0;I10;i+)/良好的风格 for(i=0;i10;i+)/不良的风格 for(i=0;I 10;i+)/过多的空格 x=a b?a:b;/良好的风格 x=aFunction();/不要写成b-Function();3.7 对齐对齐【规则3-7-1】【规则3-7-1】程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。11导航硬件 单

20、片机编程规则【规则3-7-2】【规则3-7-2】之内的代码块在右边间隔几个空格处左对齐。void Function(int x)/program code void Function(int x)./program code if(condition)./program code else ./program code if(condition)./program code else ./program code for(initialization;condition;update)./program code for(initialization;condition;update)./pr

21、ogram code While(condition)./program code while(condition)./program code 如果出现嵌套的,则使用缩进对齐,如:.3-7-1 风格良好的对齐 3-7-2 风格不良的对齐 3.8 长行拆分长行拆分【规则3-8-1】【规则3-8-1】长表达式在超出80个字符时,要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。if(very_longer_variable1=very_longer_variable12)&(very_longer_variable3=ver

22、y_longer_variable14)&(very_longer_variable5=very_longer_variable16)12导航硬件 单片机编程规则 Dosomething();长行的拆分 3.9 注释注释 注释符为“/*/”。行注释采用“/”。注释通常用于:(1)版本、版权声明;(2)函数接口说明;(3)重要的代码行或段落提示。【规则3-9-1】【规则3-9-1】一个程序的注释要在30%以上。【规则3-9-2】【规则3-9-2】注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。【规则3-9-3】【规则3-9-3】如果代码本来就是清楚的,则不

23、必加注释。否则多此一举,令人厌烦。【规则3-9-4】【规则3-9-4】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。【规则3-9-5】【规则3-9-5】注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。【规则3-9-6】【规则3-9-6】尽量避免在注释中使用缩写,特别是不常用缩写。【规则3-9-7】【规则3-9-7】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。【规则3-9-8】【规则3-9-8】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。4 表达式和基本语句表达式和基本语句

24、4.1 运算符的优先级运算符的优先级【规则4-1-1】【规则4-1-1】如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。为了防止产生歧义并提高可读性,应当用括号确定表达式的操作顺序。例如:word=(high=b&c d&c+f=g+h;/复合表达式过于复杂【规则4-2-2】【规则4-2-2】不要有多用途的复合表达式。例如:d=(a=b+c)+r;该表达式既求a a 值又求d d 值。应该拆分为两个独立的语句:a=b+c;d=a+r;【规则4-2-3】【规则4-2-3】不要把程序中的复合表达式与“真正的数学表达式”混淆。例如:if(a b c)/a b c 是数学

25、表达式而不是程序表达式 并不表示 if(ab)&(bc)而是成了令人费解的 if(ab)=”或“=-EPSINON)&(x=EPSINON)其中EPSINON 是允许的误差(即精度)。4.3.4 指针变量与零值比较指针变量与零值比较【规则4-3-4】【规则4-3-4】应当将指针变量用“=”或“!=”与NULL 比较。指针变量的零值是“空”(记为NULL)。尽管NULL 的值与0 相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if 语句如下:if(p=NULL)/p 与NULL 显式比较,强调p 是指针变量 if(p!=NULL)不要写成 if(p=0)/容易让人误解p 是整

26、型变量 if(p!=0)或者 if(p)/容易让人误解p 是布尔变量 if(!p)4.4 for 语句的循环控制变量语句的循环控制变量【规则4-4-1】【规则4-4-1】不可在for 循环体内修改循环变量,防止for 循环失去控制。【建议4-4-2】【建议4-4-2】建议for 语句的循环控制变量的取值采用“半开半闭区间”写法。半开半闭区间“0=x N”,起点到终点的间隔为N,循环次数为N。闭区间“0=x=N-1”,起点到终点的间隔为N-1,循环次数为N。相比之下,半开半闭区间的写法更加直观,尽管两者的功能是相同的。for(int x=0;xN N;x+).for(int x=0;x=N-1N-1;x+).4-4-1 循环变量属于半开半闭区间 4-4-2 循环变量属于闭区间 4.5 switch 语句语句【规则4-5-1】【规则4-5-1】每个case 语句的结尾不要忘了加break,否则将导致多个分支重叠(除非有意使多个分支重叠)。【规则4-5-2】【规则4-5-2】不要忘记最后那个default 分支。即使程序真的不需要default 处理,也应该保留语句default:break;15导航硬件 单片机编程规则 4.6 goto 语句语句【建议 4-6-1】【建议 4-6-1】建议少用、慎用 goto 语句。16

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁