单片机汇编语言程序编程规范

合集下载

单片机汇编语言程序设计

单片机汇编语言程序设计

单片机汇编语言程序设计在当今高科技时代,单片机有着广泛的应用领域,它是一种微型电脑系统,具有集成度高、功耗低等优点。

而单片机汇编语言程序设计则是单片机开发中最基础、最重要的一环。

本文将从基础概念、程序设计流程以及实例分析等方面,全面介绍单片机汇编语言程序设计。

一、基础概念1. 单片机单片机是一种集成度非常高的微型电脑系统,它由微处理器、内存、输入输出设备以及时钟电路等部分组成。

它的主要特点是片内集成度高,体积小,功耗低。

2. 汇编语言汇编语言是一种与机器语言一一对应的低级编程语言,它是用助记符、伪指令和机器指令等表示的,比机器语言更容易理解和编写。

3. 程序设计在单片机领域,程序设计是指利用汇编语言编写单片机程序的过程,目的是为了实现特定的功能。

程序设计需要包括程序编写、调试和优化等环节。

二、程序设计流程1. 确定需求在开始编写程序之前,首先需要明确需求。

根据需要实现的功能,确定程序设计的目标和要求。

2. 构思设计根据需求,进行程序的构思设计。

确定程序的结构,拟定算法和流程图,为后续的编码工作做好准备。

3. 编写代码在进行编写代码之前,需要先熟悉单片机的指令集和编程规范。

然后,根据构思设计的结果,使用汇编语言编写程序代码。

4. 调试测试编写完成代码后,需要进行调试测试。

通过单步执行、布点断点等方式,检查程序是否存在错误,是否能够正确运行。

5. 优化改进在经过测试后,根据实际情况进行优化改进。

可以通过优化算法、减少冗余代码等方式,提高程序的执行效率和稳定性。

6. 文档记录最后,需要对程序进行文档记录。

包括程序的说明、使用方法、注意事项等,方便后续的维护和升级。

三、实例分析以LED 点亮为例,演示单片机汇编语言程序设计的实际操作步骤。

1. 硬件连接将单片机与 LED 灯连接,以 STM32F103C8T6 开发板为例,连接方式如下:- 将 LED 的长脚连接至单片机的 GPIOA.0 引脚。

- 将 LED 的短脚连接至单片机的 GND 引脚。

8051单片机汇编语言程序设计

8051单片机汇编语言程序设计

8051单片机汇编语言程序设计一、顺序结构1.有两个4位压缩BCD码,分别存放在30H,31H,40H,41H单元,要求求和,结果送至51H,52H中(高位在前,地位在后),给出程序流程图ORG 0000HCLR CMOV A,31HADD A,41HDA AMOV 52H,AMOV A,30HADDC A,40HDA AMOV 51H,AEND若需要求和的数为5271和6489,请分析每条指令后A和PSW的对应的数据二、分支结构2.求双字节有符号数的补码(双字节数为16位二进制数,其最高位D15为符号位),给出程序流程图和程序代码(单分支结构)CPT16:MOV A,R7JNB ACC.7,EXTMOV C,ACC.7MOV F0,CCPL AMOV R7,AMOV A,R6CPL AADD A,#01MOV R6,ACLR AADDC A,R7MOV C,F0MOV ACC.7,CMOV R7,AEXT: RET验证以上程序对-12597和6831两数的结果是否正确。

3.求分段函数的值,X是自变量存放在30H单元,Y是因变量存放在31H单元,给出程序流程图和程序代码(多分支结构A:逐次比较法)100010X X Y X X +>⎧⎪==⎨⎪-<⎩ FUNC1:MOV A,30HCJNE A,#00H,NZEROAJMP NEGTNZERO: JB ACC.7,POSITADD A,#1AJMP NEGTPOSIT: MOV A,#81HNEGT: MOV 31H,ARET4. 根据31H (高字节)、30H (低字节)的内容(分支转移参数)转向不同的处理程序(PRGX(X=0~n ,n>256)),给出程序流程图和程序代码(多分支结构B :转移表)JUMP1:MOV DPTR,#TAB1MOV A,30HMOV B,#3MUL ABMOV R3,AMOV A,BADD A,DPHMOV DPH,AMOV A,31HMOV B,#3MUL ABADD A,DPHMOV DPH,AMOV A,R3JMP @A+DPTRTAB1: LJMP PRG0LJMP PRG1LJMP PRGn若(31H30H )=364,则分析每条指令后A ,B ,DPTR 对应的数值。

PIC单片机汇编编程规范

PIC单片机汇编编程规范

PIC单片机汇编编程规范1000字
PIC单片机汇编编程规范
1.注释:注释应该在指令上面且不应该超过一行。

可以使用“;”或“#”来注释指令或者是数据。

注释应该清晰明了,简短明了,并且应该遵循英文语法规则。

2.代码布局:代码应该分成模块或者函数,每个模块或函数应该有一个标签或标识符以及该模块或函数的注释。

代码应该根据它们的功能分组。

3.变量命名:变量应该有一个清晰的名称,并且应该遵循英文命名规则,例如,变量名不应该包含特殊字符或空格。

变量名称应该有一些含义,并且应该简短明了。

4.缩进:代码的缩进非常重要,可以增加代码的可读性。

应该使用适当的缩进来表示代码层次结构。

5.默认数据类型:可以使用“C”作为默认的数据类型,例如:DAT 0xC0 ;定义一个BYTE类型变量。

6.标签:标签应该有一个清晰明了的名称,并且应该简短明了。

标签应该在对应代码的上方,使用适当的缩进。

7.空格:应该在运算符的两侧加上空格,例如,“ADDWF F, W”而不是“ADDWFF,W”。

8.注释:应该在指令上方加上注释,并且注释应该简短明了。

9.代码格式:代码应该有适当的空格和缩进,应该使用换行符来分割不同的代码块。

10.常量定义:常量定义应该有适当的注释,并且应该使用适当的缩进。

总之,遵循上述规范可以使汇编代码更加清晰易懂,在编写和调试时也更加方便。

单片机c51汇编语言51单片机汇编语言

单片机c51汇编语言51单片机汇编语言

单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。

汇编语言是一种低级语言,是用于编写单片机指令的一种语言。

汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。

本文将介绍单片机C51的汇编语言编程。

一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。

C51指的是Intel公司推出的一种基于MCS-51架构的单片机。

该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。

二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。

它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。

在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。

三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。

以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。

2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。

3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。

4. JMP指令:用于无条件跳转到指定的地址。

5. JZ指令:用于在条件为零时跳转到指定的地址。

6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。

四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。

2. 分析程序的控制流程和数据流程。

3. 设计算法和数据结构。

4. 编写汇编指令,实现程序的功能。

5. 调试程序,并进行测试。

六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。

单片机程序设计编程规范

单片机程序设计编程规范

单片机程序设计编程规范单片机程序设计编程规范本规范适用于松翰科技 8-bit MCU部门汇编程序编写准则,同样适用于代理商及重要客户工程师编程规范参考。

本规范的目的为统一编程风格,保证程序编写质量,提高程序的可移植性和维护性。

大部分的规范严格, 品质要求高的软件公司对员工编写代码的风格都有硬性规定, 例如缩排的使用,TAB 的长度,函数变量的命名方式。

这些规定的明显好处是可以统一规范不同程序员所编制的代码,提升程序代码的可读性与可维护性,同时统一格式的编程风格也为code review提供方便。

目录一、设计总则二、排版风格三、程序可读性及可维护性四、注释五、变量命名规则六、常量命名规则七、标号命名规则八、文件命名规则及文件分割九、标准程序模块十、附录一、设计总则1.程序质量的评估程序的优劣可以从两个方面进行评估,定量指标和定性指标。

定量指标包括:1) 程序代码执行效率;2) 程序占用资源多少。

定性指标包括:1) 可调试性,即是否方便排除程序语法错误;2) 可测试性,即是否方便验证程序功能的正确性;3) 可维护性,即是否方便程序的修改和升级;4) 可移植性;5) 可读性。

2、程序架构为了便于维护和移植,推荐使用层次化的软件设计方法。

可把整个软件分为三层:应用层、界面层和底层驱动层。

各层之间的关系如下图所示。

层次化设计说明:1) 底层驱动层主要包含直接和硬件相关的驱动程序,如数码管显示、按键、峰鸣器、继电器和电机控制等。

底层的各个模块间要保持各自的独立性,不产生直接的数据交互,底层也不直接访问应用层,如果有需要,都要通过界面层进行数据交互。

2) 界面层主要提供数据交互,为应用层和底层驱动之间以及底层驱动层各模块之间提供数据的交互。

3) 应用层主要完成具体功能的实现,它要通过界面层控制底层驱动层各模块来完成所需功能,而不能越过界面层直接访问底层驱动层。

所有的用户接口要在应用层来实现。

4) 一个好的架构必须将底层硬件包装起来,为应用程序提供一组丰富的函数操作(buffer or parameter),例如在中断的处理中,应用程序不需要资料中断的堆栈如何保护不需要知道地址操作, 只需要读取中断产生的旗标动作。

8051单片机汇编程序编码规范

8051单片机汇编程序编码规范

8051单片机汇编程序编码规范引言软件设计更多地是一种工程,而不是一种个人艺术。

如果不统一编程规范,最终写出的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。

分析表明,编码阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。

可见,提高软件质量必须降低编码阶段的错误率。

如何有效降低编码阶段的错误呢?这需要制定详细的软件编程规范,并培训每一位程序员,最终的结果可以把编码阶段的错误降至10%左右,同时也降低了程序的测试费用,效果相当显著。

本文从代码的可维护性(可读性、可理解性、可修改性)、代码逻辑与效率、函数(模块)接口、可测试性四个方面阐述了软件编程规范,规范分成规则和建议两种,其中规则部分为强制执行项目,而建议部分则不作强制,可根据习惯取舍。

1.排版规则1程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB和空格缩进。

缩进的目的是使程序结构清晰,便于阅读和理解。

<TAB>默认宽度应为8个空格,由于Word中<TAB>为4个空格,为示范清晰,此处用2个<TAB>代替(下同)。

例如:MOV R1, #00HMOV R2, #00HMOV PMR, #PMRNORMALMOV DPS, #FLAGDPTRMOV DPTR, #ADDREEPROMread1kloop:read1kpage:INC R1MOVX A, @DPTRMOV SBUF, AJNB TI, $CLR TIINC DPTRCJNE R1, #20H, read1kpageINC R2MOV R1, #00HCPL WDICJNE R2, #20H, read1kloop ;END OF EEPROM规则2在指令的操作数之间的,使用空格进行间隔,采用这种松散方式编写代码的目的是使代码更加清晰。

单片机程序设计编程规范

单片机程序设计编程规范单片机程序设计编程规范1.文件结构与命名规范1.1 源码文件- 所有源码文件统一使用英文小写字母命名。

- 文件名应简洁明了,能够清晰表达文件的功能。

- 文件名中可以使用下划线 (_) 连接多个单词。

1.2 头文件- 头文件名与源码文件名相同,但使用大写字母命名。

- 头文件应包含必要的宏定义、类型定义、函数声明等。

1.3 项目结构- 源码文件应按功能模块进行组织和管理,每个模块应放在独立的文件夹中。

- 在项目的根目录下添加一个README文件,对项目进行简要说明。

2.编码规范2.1 缩进与空格- 使用4个空格进行缩进,不使用Tab字符。

- 在操作符前后添加空格,增加可读性。

2.2 函数命名- 函数名使用小写字母命名,单词之间使用下划线 (_) 连接。

- 函数名应能够清晰表达函数的功能。

2.3 变量命名- 变量名使用小写字母命名,单词之间使用下划线 (_) 连接。

- 变量名应简洁明了,能够清晰表达变量的用途和含义。

- 全局变量命名应以g_开头。

2.4 常量命名- 常量名使用全大写字母命名,单词之间使用下划线(_) 连接。

2.5 注释规范- 使用注释来解释代码的意图、功能和实现细节。

- 在关键代码处添加注释,并保持注释与代码的同步更新。

- 注释应写在被注释代码的上方,并使用// 或 / /注释符号。

3.函数设计3.1 函数长度- 函数应尽量保持简短,避免超过一页纸的长度。

- 如果函数过长,应考虑将其拆分为多个较小的函数。

3.2 函数参数- 函数参数应尽量少,并且要考虑参数的顺序和类型。

- 不要在函数参数中使用全局变量,尽量使用局部变量。

3.3 函数返回值- 函数的返回值应具有明确的含义,并清晰地传达函数的执行结果。

4.异常处理与错误消息4.1 异常处理- 对可能发生异常的代码块进行适当的异常处理。

- 使用try-catch块捕获异常,并进行相应的处理或记录。

4.2 错误消息- 提供清晰、准确的错误消息,以便于调试和修复问题。

PIC单片机汇编编程规范

PIC汇编编程及审核规范(V1.1)一、程序命名规范程序文件名由两部分构成:一部分为产品型号或功能描述,一部分为软件版本号。

产品型号用字母描述,可为英文或中文拼音。

软件版本号为4位,前一位固定为字母”V”,后3位为数字,编写软件版本号应按照从小到大的顺序递增。

开发阶段版本号从001开始;中试之后版本号从100开始。

例如:光电感烟探测器JTY-GD-G3程序 GDG3V001电子差定温探测器JTW-ZCD-G3N程序 GWG3NV101二、程序头格式在每个文件的开始要有一个对该文件总体功能的描述,软件版本,以及作者及编写时间。

采用模版统一格式。

1.在功能描述中,除了对软件实现的功能做简要描述外,还应包括使用的单片机,晶振频率,以及主要I/O口实现的功能。

2.如果程序升级时应增加如下说明。

1)程序升级后的版本号:例如“版本号:Ver105”2)程序升级的修改作者:例如“更改人:×××”3)程序升级的修改日期:例如“更改日期:01 12 17”4)应对程序升级进行简单修改说明。

5)应给出程序增加、更改、删除项说明,每项总处数。

3.程序头如采用如下统一格式:;**************** ;* 文件名* ;**************** ;* 功能描述:;* 软件版本;* 开始编写—完成日期:;* 作者:三、子程序、标号及变量命名规则(推荐)1.子程序及标号命名规则子程序命名应使用相关含义英文。

子程序入口标号应使用子程序名相关含义、常用的英语单词(拼音)或单词(拼音)缩写。

如果一个英语单词表述不清,应使用多个英语单词缩写表示。

程序里边的标号应与执行该分支功能相关含义、常用的英语单词(拼音)或单词(拼音)缩写,如果没有确切含义,应优先选用子程序入口标号前面字母缩写加两位序号。

2.变量命名规则标志寄存器使用相关含义、常用的英语单词英文+ Flag;暂用寄存器使用:暂存对象英文缩写+Temp;计数寄存器使用暂存对象英文缩写+ Numb;其它寄存器:与存放对象相关含义、常用的英语单词(拼音)或单词(拼音)缩写。

单片机程序设计编程规范

单片机程序设计编程规范1. 概述本文将介绍单片机程序设计编程过程中应遵循的一些规范。

这些规范旨在提高程序的可读性、可维护性和可重用性,帮助开发人员编写出高质量的单片机程序。

2. 代码布局2.1 源文件结构每个源文件应包含程序的一个完整模块。

源文件以 `.c` 扩展名结尾。

源文件应包含适当的注释,以说明文件的目的和模块。

2.2 函数布局每个函数应尽可能短小,只完成一项具体的功能。

函数应使用有意义的名称,具有描述性。

函数应尽量避免超过 30 行的代码,如果超过应考虑是否需要进行函数分割。

3. 变量命名规范3.1 命名风格变量名应使用小写字母和下划线的组合,如 `my_variable`。

常量应使用全大写字母和下划线的组合,如 `MY_CONSTANT`。

3.2 变量名长度变量名应该具有描述性,尽量避免使用过于简单或过于复杂的变量名。

变量名长度应控制在 20 个字符以内,以保证可读性。

4. 注释规范4.1 文件注释每个源文件应包含文件注释,用于说明文件的目的和模块。

4.2 函数注释每个函数应包含函数注释,用于说明函数的功能、参数和返回值。

4.3 行内注释行内注释应用于解释代码的特定部分,帮助阅读者理解代码的意图。

5. 常量定义规范常量定义应尽量避免使用魔术数,应该使用有意义的常量名来代替。

6. 编码风格使用正确的缩进和对齐方式,以提高代码的可读性。

使用适当的空格来增强代码的可读性,但避免过多的空格导致代码冗长。

使用适当的命名风格和约定,以提高代码的可读性。

7. 错误处理每个函数应该有清晰的错误处理机制,包括返回值、错误码和异常处理等。

错误消息应清晰、明确,并有助于定位错误。

8. 代码复用尽量避免重复的代码,使用函数和模块的方式来实现代码复用。

开发人员应鼓励制定和使用通用的接口、库和模块,以提高代码复用性。

9. 版本管理定期对代码进行版本管理,并使用版本控制工具来管理代码的修改和更新。

10.本文介绍了单片机程序设计编程规范的一些基本原则。

单片机教案汇编语言程序设计

单片机教案汇编语言程序设计一、引言单片机是一种小型集成电路芯片,具有独立完成特定任务的能力。

而汇编语言是一种低级程序设计语言,能够直接操作硬件资源。

本教案旨在介绍单片机的程序设计,重点讲解汇编语言的基本概念和编程技巧,帮助学习者掌握单片机的应用。

二、单片机基础知识在开始学习汇编语言程序设计之前,需要对单片机的基础知识有所了解。

主要包括单片机的结构、寄存器的作用、IO口的应用等内容。

通过对这些基础知识的学习,能够更好地理解汇编语言的工作原理和编程思路。

三、汇编语言概述汇编语言是一种使用助记符来表示机器指令的低级程序设计语言。

相对于其他高级语言,汇编语言更接近硬件层面,可直接操控单片机的寄存器和IO口。

本节将介绍汇编语言的基本概念、语法规则和常用指令集,帮助学习者熟悉汇编语言的编写方式。

四、单片机编程环境搭建在进行汇编语言程序设计前,需要搭建相应的开发环境。

常用的单片机开发工具包括Keil、IAR等。

本节将以Keil为例,介绍如何配置和使用开发工具,以及如何将程序下载到单片机中进行调试。

五、第一个汇编程序本节将以一个简单的LED闪烁程序为例,介绍如何使用汇编语言编写单片机程序。

通过对程序的分析和调试,学习者能够理解汇编语言的基本结构和编程过程,并且能够独立完成简单的单片机程序设计。

六、汇编语言编程技巧除了掌握基本的汇编语言知识外,还需要掌握一些编程技巧,以提高程序的效率和稳定性。

本节将介绍一些常用的汇编语言编程技巧,包括循环、条件判断、子程序调用等,帮助学习者编写更加复杂和实用的单片机程序。

七、实例分析本节将通过几个实例,分析并介绍实际应用中的单片机程序设计方法。

例如,如何控制电机的转动方向和速度、如何读取温湿度传感器的数据等。

通过这些实例的分析,学习者能够将所学的知识应用到实际项目中,并且能够更好地理解和解决实际问题。

八、实验设计在本教案的最后,将提供几个实验项目作为实践环节,帮助学习者巩固所学的知识和技能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV DPS, #FLAGDPTR
MOV DPTR, #ADDREEPROM
read1kloop:
read1kpage:
INC R1
MOVX A, @DPTR
MOV SBUF, A
JNB TI, $
CLR TI
INC DPTR
CJNE R1, #20H, read1kpage
INC R2
MOV R1, #00H
规则3
注意变量的有效取值范围,防止表达式出现上溢或下溢。
规则4
防止易混淆的指令和操作数拼写错误。
规则5
避免函数中不必要语句,防止程序中的垃圾代码,预留代码应以注释的方式出现。
程序中的垃圾代码不仅占用额外的空间,而且还常常影响程序的功能与性能,很可能给程序的测试、维护等造成不必要的麻烦。
规则6
通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。
规则6
用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。
规则7
在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。
即有测试代码的软件和关掉测试代码的软件,在功能行为上应一致。
规则8
发现错误应该立即修改,并且若有必要记录下来。
2)在源代码头部加入注解来说明协议相关的、非通用缩写。
3)标识符的长度不超过12个字符。
规则2
变量命名约定:<前缀> +主体;注释
变量命名要考虑简单、直观、不易混淆。
前缀是可选项,表示变量类型,由于汇编中变量多是单字节变量,所以单字节变量可以不加前缀,对于bit和双字节型变量,使用小写的b和d作为前缀表示。
规则1
程序在必要的地方必须有注释,注释要准确、易懂、简洁。
例如如下注释意义不大:
MOV DXCE1COUNTER, #00H ;将DXCE1COUNTER赋值为0
而如下的注释则给出了额外有用的信息:
JNZ PcComm_Err ;假如校验出错
规则2
注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
规则3
在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应函数,并且要有详细的说明。本规则是针对项目组或产品组的。
规则4
在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)及行号。
统一的调测信息格式便于集成测试。
规则5
正式软件产品中应把调测代码去掉(即把有关的调测开关关掉)。
规则4
变量定义时,保持对齐。便于阅读和检查内存的使用情况。
例如:
RegLEDLOSS EQU 30H ; VARIABLE ; TESTLED==RegLEDLOSS.0
RegLEDRA EQU 31H ; VARIABLE
RUNLED_Flag EQU 32H ; VARIABLE ; 256ms改变一次RUNLED状态
1.排版
规则1
程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB和空格缩进。缩进的目的是使程序结构清晰,便于阅读和理解。
默认宽度应为8个空格,由于Word中为4个空格,为示范清晰,此处用2个代替(下同)。
例如:
MOV R1, #00H
MOV R2, #00H
MOV PMR, #PMRNORMAL
为了节约堆栈资源,中断时要求不要保存太多资源,中断嵌套和程序嵌套层数不要太多,尽量不要超过5层。这就要求合理的划分功能模块。
规则12
看门狗
看门狗电路用于在单片机死机时自动复位。单片机需要定时向看门狗发送脉冲,俗称”喂狗”。喂狗不可太勤,这样看门狗没有起到作用;也不可太慢,这样容易造成单片机复位。正确的喂狗应该在主循环中进行,最好是建立一个独立的系统监控进程。不可以在定时中断中喂狗,应为单片机有时可能会在主循环中死掉。
可见,提高软件质量必须降低编码阶段的错误率。如何有效降低编码阶段的错误呢?这需要制定详细的软件编程规范,并培训每一位程序员,最终的结果可以把编码阶段的错误降至10%左右,同时也降低了程序的测试费用,效果相当显著。
本文从代码的可维护性(可读性、可理解性、可修改性)、代码逻辑与效率、函数(模块)接口、可测试性四个方面阐述了软件编程规范,规范分成规则和建议两种,其中规则部分为强制执行项目,而建议部分则不作强制,可根据习惯取舍。
规则9
开发人员应坚持对代码进行彻底的测试(单元测试),而不依靠他人或测试组来发现问题。
规则10
清理、整理或优化后的代码要经过审查及测试。
规则11
代码版本升级要经过严格测试。
8.代码编译
规则1
打开编译器的所有告警开关对程序进行编译。
防止隐藏可能是错误的告警。
规则2
某些语句经编译后产生告警,但如果你认为它是正确的,那么应通过某种手段去掉告警信息。
对公共变量赋值时,若有必要应进行合法性检查,以提高代码的可靠性、稳定性。
规则3
尽量不设计多参数函数,将不使用的参数从接口中去掉,降低接口复杂度,减少函数间接口的复杂度。
规则4
对所调用函数的返回码要仔细、全面地处理。
防止把错误传递到后面的处理流程。如有意不检查其返回码,应明确指明。
规则5
检查接口函数所有输入参数的有效性。
4.可维护性
规则1
函数和过程中关系较为紧密的代码尽可能相邻。
规则2
每个函数的源程序行数原则上应该少于200行。
对于消息分流处理函数,完成的功能统一,但由于消息的种类多,可能超过200行的限制,不属于违反规定。
规则3
语句嵌套层次不得超过5层。
嵌套层次太多,增加了代码的复杂度及测试的难度,容易出错,增加代码维护的难度。
ps:从网上收集了一些相关内容,结合我自己的经验,欢迎拍砖,谢绝辱骂;
ps2:有些可能不常用,因为大家写不到那么长的代码,就我自己写的最长的汇编代码也不超过10K行;
•硅谷芯微为莘莘学子提供全日ቤተ መጻሕፍቲ ባይዱ、在职嵌入式工程师技术培训,地处深圳市国家级高新科技产业园区内,配套设施齐全,实力有保障,欢迎来电咨询!
规则10
中断和恢复
中断程序应该尽量短,应该在中断中进行标记,在主程序中处理。但实时性很高的程序段例外。
中断时应该保存所有涉及到的通用变量和寄存器,如A, PSW, DPTR等。
规则11
堆栈设置
堆栈对于程序非常重要,对于堆栈的设置要合理。堆栈太小,在嵌套调用和很容易溢出,造成系统故障;堆栈太大,浪费RAM资源。
规则6
对于所有的常量,变量,数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,在声明时都必须加以注释,说明其含义。
规则7
维护代码时,要更新相应的注释,删除不再有用的注释。保持代码、注释的一致性,避免产生误解。
3.命名
规则1
标识符缩写
形成缩写的几种技术:
1)去掉所有的不在词头的元音字母。如screen写成scrn, primtive写成prmv。
5)使用标准的或惯用的缩写形式(包括协议文件中出现的缩写形式)。如BSIC(Base Station Identification Code)、MAP(Mobile Application Part)。
关于缩写的准则:
1)缩写应该保持一致性。如Channel不要有时缩写成Chan,有时缩写成Ch。Length有时缩写成Len,有时缩写成len。
规则3
头文件、源文件的头部,应进行注释。注释必须列出:文件名、作者、目的、功能、修改日志等。
规则4
函数头部应进行注释,列出:函数的目的、功能、输入参数、输出参数、涉及到的通用变量和寄存器、调用的其他函数和模块、修改日志等。对一些复杂的函数,在注释中最好提供典型用法。
规则5
对重要代码段的功能、意图进行注释,提供有用的、额外的信息。并在该代码段的结束处加一行注释表示该段代码结束。
规则6
检查函数的所有非参数输入,如外部数据、公共变量等。
7.代码可测性
规则1
模块编写应该有完善的测试方面的考虑。
规则2
源代码中应该设计了代码测试的内容。
在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码。
程序的调试与测试是软件生存周期中很重要的一个阶段,如何对软件进行较全面、高率的测试并尽可能地找出软件中的错误就成为很关键的问题。因此在编写源代码之前,除了要有一套比较完善的测试计划外,还应设计出一系列代码测试手段,为单元测试、集成测试及系统联调提供方便。
2)使用每个单词的头一个或几个字母。如Channel Activation写成ChanActiv,Release Indication写成RelInd。
3)使用变量名中每个有典型意义的单词。如Count of Failure写成FailCnt。
4)去掉无用的单词后缀ing, ed等。如Paging Request写成PagReq。
引言
软件设计更多地是一种工程,而不是一种个人艺术。如果不统一编程规范,最终写出的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。
分析表明,编码阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。
6.接口
规则1
去掉没有必要的公共变量,编程时应尽量少用公共变量。
公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。应该构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。
相关文档
最新文档