单片机程序设计编程规范
单片机程序设计编程规范
本规范适用于松翰科技8-bitMCU部门汇编程序编写准则,同样适用于代理商及重要客户工程师编程规范参考。本规范的目的为统一编程风格,保证程序编写质量,提高程序的可移植性和维护性。
大部分的规范严格,品质要求高的软件公司对员工编写代码的风格都有硬性规定,例如缩排的使用,TAB的长度,函数变量的命名方式.这些规定的明显好处是可以统一规范不同程序员所编制的代码,提升程序代码的可读性与可维护性,同时统一格式的编程风格也为codereview提供方便.
目录
一、设计总则
二、排版风格
三、程序可读性及可维护性
四、注释
五、变量命名规则
六、常量命名规则
七、标号命名规则
八、文件命名规则及文件分割
九、标准程序模块
十、附录
设计总则一、一、设计总则
1.程序质量的评估
程序的优劣可以从两个方面进行评估,定量指标和定性指标。
定量指标包括:
1)程序代码执行效率;
2)程序占用资源多少。
定性指标包括:
1)可调试性,即是否方便排除程序语法错误;
2)可测试性,即是否方便验证程序功能的正确性;
3)可维护性,即是否方便程序的修改和升级;
4)可移植性;
5)可读性。
2、程序架构
为了便于维护和移植,推荐使用层次化的软件设计方法。可把整个软件分为三层:应用层、界面层和底层驱动层。各层之间的关系如下图所示。
层次化设计说明:
1)底层驱动层主要包含直接和硬件相关的驱动程序,如数码管显示、按键、峰鸣器、继电器和电机控制等。底层的各个模块间要保持各自的独立性,不产生直接的数据交互,底层也不直接访问应用层,如果有需要,都要通过界面层进行数据交互。
2)界面层主要提供数据交互,为应用层和底层驱动之间以及底层驱动层各模块之间提供数据的交互。
3)应用层主要完成具体功能的实现,它要通过界面层控制底层驱动层各模块来完成所需功能,而不能越过界面层直接访问底层驱动层。所有的用户接口要在应用层来实现.
4)一个好的架构必须将底层硬件包装起来,为应用程序提供一组丰富的函数操作(bufferorparameter),例如在中断的处理中,应用程序不需要资料中断的堆栈如何保护不需要知道地址操作,只需要读取中断产生的旗标动作.
5)在即时性软件系统里面,对达到高效率的实时性与反应力,所以程序使用大量的事件触发方式来设计任务.事件有可能来自外部的触发(key,rxdata,sensordetect,…)也可能是系统内部自行产生的(Timer,alarm,flag),与事件触发方式相对应的是定时查询方式(polling),一般来说polling效率较差因为有多余的动作而且系统反应时间与查询polling时间间隔有关,但是在小型的MCU系统里面用Polling方式反而简单许多
3、设计基本原则
1)尽量减少各个子程序功能模块间的耦合度(耦合度是指一个程序的执行对另一个程序的影响力),保证各自的独立性。一般情况下,建议子程序模块功能的划分要尽可能细化,功能尽量单一,减少子程序模块间的数据交互。
2)在满足功能需求的情况下,可适当牺牲代码的执行速度,以保证程序的透明度。
3)主要子程序模块间的交互,要通过特定的界面跟应用层进行沟通,可使用FIFO(Firstin,Firstout)或是Buffer两种方式。每种子程序模块都可以有自己的FIFO。例如:
就按键来说,一般有Keybuffer、KeyFIFO或直接进入APFIFO三种设计方式。
Keybuffer:一般用于保存数字按键信息。例如:在电话机的设计中,需要记录按键内容用于LCD显示、最后数字确认、数字存储等,这时候需要把按键值的信息(0123456789*#)记录在Keybuffer中;
KeyFIFO:一些功能按键可以将相应信息列入到KeyFIFO中,等待应用层的取用,这样可根据不同的工作模式进行不同的处理及动作。
这些类似的观念可以应用在许多周边中:
输入类:Key、RFDatainput、UARTdatainput、Switchinput等;
输出类:LCDdisplay、LEDdisplay、UARTdataoutput等。
APPFIFO(应用界面层):主要是将发生的事件储存在APPFIFO里面等待适当的时间依序处理,不然有可能造成系统在某一程序物件里面循环,从而降低系统的实时性(Real-Time)。
4)每个子程序模块只能有唯一一个程序入口地址在程序的首部,只能有唯一一个程序出口地址在程序的尾部。
例如:
以下的写法是不规范的(两个RET出口,存在调试时不易设立断点,程序可读性降低等问题):
lable:
b0bts0fz
ret
…
clry
ret
应该改为(只有一个出口位置,标号为lable90,便于程序检查):
lable:
b0bts0fz
jmplable90
….
clry
lable90:
ret
5)上电复位时要对所有的RAM空间进行初始化(建议用户寄存器清零,系统寄存器进行必要设定),不要使用未经初始化的变量。RAM未经过完整的初始化,容易导致程序执行的不确定性,这一不良现象往往在批量生产中有所体现。(这点是工程师经常犯错的地方,须特别注意)
6)系统中如果需要等待一些未知的应答信号,如通信或等待输入信号时,必须进行超时或异常处理,以防止程序进入“死等”状态。
例如在红外接收中,由于信号的突然消失或干扰从而无法得到一帧完整或正确的信息,这时需要复位接收程序的入口条件并退出接收程序,而不是一直等待信号的来临。不然无法进行下次接收甚至会影响到其它程序的执行。
7)通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。这种方式是解决软件空间效率的根本办法。
8)保证循环体内的工作量最小化。应仔细考虑循环体内的语句是否可以放在循环体之
外,使循环体内工作量最小,从而提高程序的执行效率。
9)在多重循环中,应将最忙的循环放在最内层。
10)中断处理程序应尽量短。有效的作法为:在中断中进行标记,在主程序中进行处理。但一些实时性要求较高的程序例外。此外,进入中断时应该保存涉及到的变量和寄存器。
11)看门狗的正确使用。看门狗主要用于微控制器死机时的时间溢出复位,需要程序适时清除。正确的处理方式为:整个系统程序中尽量保证只有一处清看门狗位置,而且应处在主循环的主干位置。切记不可在定时中断中清狗,因为微控制器有时只是在主循环中死掉。(所有AC电源的应用程序都必须强迫加入看门狗选项尤其是条件式的看门狗有利于系统发生异常后的重启动)
排版风格二、二、排版风格
1、程序采用缩进风格编写,缩进为1个Tab键,1个Tab键定义为8个空格位。
2、程序中的标号要从第一列开始书写。以“.”开头的预编译命令也要从第一列开始书写,其他预编译命令采用缩进风格编写。
例如:
1)以“.”开头的预编译命令要从第一列开始书写,其他预编译命令采用缩进风格书写。
.LIST;从第一列开始书写
INCLUDESTDmacro1.h
.CONST
NUMBEREQU55h
.DATA
wk00DS1
.CODE
ORG0h
2)标号要从第一列开始书写。
main:;从第一列开始
…
jmpmain;缩进8个空格位
3)变量或常量的定义采用缩进风格。
例如:
.DATA
keybufDS1
.CONST
NUMBEREQU8
4)定义变量或常量时,变量名或常量名与命令符之间 …… 此处隐藏:13791字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [幼儿教育]【完整版】2019-2025年中国药物发现外
- [幼儿教育]2018-2019年初中信息技术广东初一竞赛
- [幼儿教育]最新外研版(一起)小学英语五年级上册《
- [幼儿教育]农业推广与创新管理专业 -中农大毕业论
- [幼儿教育]2017-2022年中国更年期用药行业市场深
- [幼儿教育]数学1.1.2第1课时棱柱、棱锥和棱台的结
- [幼儿教育]二年级群文阅读课例欣赏
- [幼儿教育]2010-2015年中国保险行业投资分析及深
- [幼儿教育]厄运打不垮的信念第一课时
- [幼儿教育]巧用文本,让表达在言语中绽放论文
- [幼儿教育]中学生百科知识竞赛题及答案
- [幼儿教育]八大菜系英文简介
- [幼儿教育]中国男装牛仔裤市场发展研究及投资前景
- [幼儿教育]远程数字视频监控系统在银行的应用
- [幼儿教育]光纤光缆制造工艺及设备
- [幼儿教育]国家安全法试题及答案
- [幼儿教育]2011高中提前招生及竞赛试题(物理卷1)
- [幼儿教育]宁夏第三产业房地产业、科学研究和技术
- [幼儿教育]中兴通讯 ME3000模块用户硬件设计手册_
- [幼儿教育]紫外线灯管的辐照强度问题
- 苏联东欧剧变的原因和历史教训浅析
- 人工智能导论实验报告(学生)
- 思科ITE章考试原题及答案
- 《学习雷锋好榜样》主题班会教案
- 加油站建设项目安全评价报告
- 剖析社保卡管理系统
- 2017-2018年影视剧新媒体版权运营行业
- 2017-2018学年四川省成都市高一上学期
- 2019最新高中数学 第三章 3.2.1 几类不
- 2011-2015年中国基酸市场调查及行业前
- 人教版新课标选修八Unit 1 课件Warming
- 郭溪燎原小学辅导学生记录表
- 教师资格证统考综合素质写作秘笈
- 国外校园绿色建筑研究方向与建设实践
- 15.1 动物运动的方式 课件(北师大版八
- 民用飞机空调系统
- 长安侠文化传统与唐诗的任侠主题
- 《中国近现代史纲要》名词解释
- 11金本《保险学概论》复习资料
- 民用建筑机电安装工程专业施工图图纸会




