江厚祥 张辉 石艳红 殷仕淑
(安徽财经大学电子信息工程系 安徽省蚌埠市 233000)
目前,单片机的应用领域非常广泛,已经涉及到人类生活的方方面面。凭借着单片机的独特之处,从工业上的流水线管理到家用电器的控制和检测,从智能IC 卡到网络技术的通信上,都有着大量单片机的应用。因此,提高单片机的运行效率是一件对促进工作生活效率和提升电子科技技术有重大意义的事情。
单片机又称单片微控制器,是一种集成了一个计算机系统的芯片,可以把它视为一个没有I/O 口的微型计算机。单片机将绝大部分功能都集中在了同一芯片上,但仍然需要大量的组成部件和相关原件,并不是很多人认为的一个简单的独立元件就可以构成的某工作系统。单片机芯片内部具有和一个完整计算机系统几乎相同的组成部件,诸如内存、CPU、内部总线等。甚至现在很多单片机还具有外存系统和集成系统。一些例如定时器、通信设备、时钟等外部设备也是其组成的部件之一。图1 显示的是简单的单片机系统框图。
单片机虽然体积小,但是核心功能完善。同时由于单片机系统的高度集成化,让其拥有了体积小,可靠性强等优点,这一系列因素让单片机系统有了非常强的实用性。从上个世纪九十年代开始,单片机就已经发展起来,从微电子,集成电路等相关技术中脱颖而出,到现在单片机已经遍布工业生产和日常生活中的各方面。
单片机系统具有体积小、控制能力强、能耗较低、操作灵活等优点,这些优点让单片机系统非常适用于工业生产中。工业生产中控制和检测都十分重要,每一台机器会依据芯片上的程序进行数据收集和控制生产,单片机系统越来越多的应用于工作生产中。在各种仪器仪表中也能看见单片机的身影。目前,单片机可以通过控制不同类型的传感器,来实现电压、功率、频率、温度、湿度、速度等各种物理量的测量与控制。而且由于单片机的各种优点,可以使 各种仪器仪表更加具有微型化、智能化以及降低成本等提高, 并且功能会更加强大。经过多年的发展,现在已经形成了成多种多样的控制和数据采集系统以及各种智能化仪表中,例如工厂流水线的自动化管理、电梯智能控制以及报警系统等等。
单片机系统虽然体积小,但其性能与计算机相差不大,运行速度也较快,在很多领域都是可以代替绝大多数计算机。同时现在的单片机普遍都具备了通信接口,因此计算机系统可以非常方便地同大多数单片机系统进行数据通信,大大方便了计算机网络系统与通信设备之间的通信。单片机的智能控制方便了人们对于信息技术的运用,大量运用于现代通信技术,如电话、手机、自动通信系统、无线对讲机等,也可以接受卫星发生的信号,进行沟通与交流。单片机系统离我们生活并不遥远,由于其价格低廉,单片机广泛应用于家用电器的方面。日常生活中的各类电器,诸如空调、 电冰箱、电视机、电饭褒、微波炉、各类音响以及电子秤等,几乎都可以看见单片机系统的身影。此外,单片机的优点,让其诸如医疗、金融、教育、科研、国防等领域的应用也非常广泛。
图1:单片机系统框图
图2:单片机抗干扰流程
单片机编程使用C 语言。C 语言是一种侧重于编译的程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言的优势在于能以简易的方式编译、处理低级存储器,同时仅产生少量的机器语言和需要少量运行条件就可以运行,是一种高效率程序设计语言。但是C 语言作为一种应用于底层处理器的语言,虽然提供了大量的数据类型,但是并不适用所有平台。C 语言中的浮点和整数等数据类型需要系统一定的内部程序或内部函数的支持,编程生成的代码相对较长,而单片机系统作为一种资源十分有限的系统,显然是不适合采用这类数据类型。为了适应单片机系统的特性,C 语言做了一些改进和简化。考虑到单片机存储器资源有限,所使用的编程语言中只支持其中的 bit 和 char 等生成的代码较短的数据类型。
另外,单片机程序代码要求高效。如果程序较长,会影响单片机系统的效率。若使用者编程技术不好,选用的数据类型不同,生成的代码会较为复杂,甚至有可能比一般汇编语言生成的代码长几倍,这种情况下,会大大降低单片机的运行效率。因而在使用单片机系统的过程中,我们必须要时刻注意自己的程序是否完善,是否存在还可以优化的空间。
在使用 C 语言编程的过程中,单片机系统要达到最高的效率需要注意几个方面。
(1)在开始编程前,最好熟悉所使用的C 编译器。这是因为不同的MCU 厂家的C 语言编译系统并不完全相同的,特别是在一些特殊功能模块有着一定的差异。在编程时,如果不弄清楚这些特点,那么调试过程中就会出现很多问题,进而导致执行效率低。建议在编程前,先试验一下可选的每条C 语言编译以后对应的汇编语言的语句行数,最后通过比较,选用编译效率最高的语句。优秀的嵌入式系统 C 编译器代码长度和执行时间可以比以汇编语言编写的同样功能程度长 5%- 20%。
(2)尽最大可能的优化算法,使用效率高的代码,减小单片机系统有限的资源的负担。可以通过选用合适的数据类型,和优化的,执行时间短,代码长度短的程序。在计算时,还可以采用近似计算来代替一些精确和复杂的计算,来减少单片机系统资源的占用,但要考虑实际情况下的可接受精度范围。
(3)选用占用存储器字节数较小的数据类型。不同的数据类型占用的数据类型有着一定的区别,在其他平台上这种差别可以忽略不急,但在单片机系统这类资源紧张的平台,这种问题就显得十分重要了。同时不同的数据类型编译后的代码长度也有所区别。表1 显示的是一些数据类型所占字节和编译后的代码长度对比。
表1
从表1 可以看出,一些数据类型之间的差距还是相当大的,比如char 类型和float 类型的代码长度差距多达489 个字节。所以在进行编译时,要注意如果使用高优先级的数据类型,那么相对应的程序代码也会更长,会大大影响单片机系统的运行速度,也真是因为这样,我们要尽可能的多使用如char,bit 等这类机器语言直接支持的数据类型,以提高单片机系统的运行效率。
无论在什么系统上进行编程,减少bug 都是必须要考虑的问题。Bug 是无法消除的,使用者只能密切注意程序中是否有bug 并尝试解决它。在进行编程前,要弄清楚任务需求的是什么,结合实际进行分析,在流程设计中注意逻辑和选择;编程中,选择合适的代码;编程后,认真进行测试,观察相关参数是否有问题。这样将会大大减少程序中出现bug 的可能性。
由于在单片机实际使用时,其应用系统的工作环境往往是比较复杂和恶劣的。但同时单片机系统的控制又要必须长期稳定且可靠地运行,否则将会导致误差加大,严重时会使系统失灵,然后造成巨大的损失,所以必须要考虑其抗干扰的能力。在实际处理问题时,发生干扰是复杂且多变的。去除干扰源,隔断干扰路径是防止单片机干扰最为有效的办法,然而往往很难做到 , 所以单片机自身的抗干扰能力就显得十分重要。
干扰源如电磁干扰、噪声干扰等可能会从以下几个部分干扰单片机系统的正常运行:
(1)从输入时发生干扰。干扰源会影响单片机系统的模拟信号输入通道,叠加并影响有用信号,加大在数据采集阶段时的误差,尤其当输入信号是弱信号时,要尤其注意这个问题。同时,单片机系统的某些控制依赖一些状态的输入信号和逻辑处理结果,如果干扰源使单片机系统采集到了虚假信号或是错误信号,就会加大控制误差,甚至使单片机系统的控制失灵。
(2)干扰源也会直接影响单片机本身。单片机控制系统中,数据都存储在程序存储器中,但其中的数据仍然是可能被修改的,如果干扰源过强,那么内 RAM、外扩 RAM 中的数据都有可能受到外界干扰而被篡改。这样就会导致尽管程序编写正确,仍然会控制失灵或者输出一个错误值。干扰源影响单片机系统还体现在干扰程序计数器这一方面上。当程序计数器被干扰时,本来保证程序正常运行的计数器会变成一个随机值,这样会让程序失灵,甚至陷入一个死循环中。考虑到以上这些情况,如何提高单片机的抗干扰能力是非常重要的。
单片机软件抗干扰最重要的是处理好复位状态,这是因为当单片机系统被干扰时,往往就是使用软件陷阱和看门狗将程序拉回到复位状态。一般单片机都会有一些标志寄存器, 可以用来判断复位原因。当然也可以在系统中设置一些标志位,每次程序复位时,可以使用这些标志位来判断不同的复位原因。如果编程能力足够,还可以根据不同的标志直接跳到相应的处理程序,让程序的运行显得更具有连贯性。总之,使用软件抗干扰时,注意设计灵活,尽量节省硬件资源,提高工作效率。单片机抗干扰流程如图2 所示。
在进行检测时,可以对系统运行中的超范围管理参数进行检测,观察它可能会在哪一步出现的问题。超范围管理参数主要包含物理参数、资源参数、应用参数和过程参数等。物理参数主要是系统的输入参数, 它包括激励参数、采集处理中的运行参数和处理结束的结果参数。资源参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆亚深度。应用参数常表现为一些单片机功能单元的应用条件。过程参数指系统运行中的有序变化的参数。可以看出,在单片机系统运行时检测这些参数可以有效发现单片机系统的运行效率。
现提供一些可以检测单片机系统的测试方法。
(1)测试单片机软件功能的完善性,即测试软件是否写的完整正确;
(2)上电、掉电测试,即多次开关电源测试单片机系统的可靠性;
(3)老化测试,即长时间测试单片机系统的可靠性;
(4)ESD 和EFT,即使用各种干扰模拟器测试单片机系统的可靠性。
同时,在这些固定的测试方法以外,我们还可以根据单片机未来预计使用情况,进行有目的的测试。例如如果单片机系统未来工作在静电干扰较大的地方,我们可以用衣服织物故意摩擦单片机系统的接触端口,由此测试抗静电的能力等。
单片机发展至今,凭借着自身的优点,已经成为计算机领域的一个重要发展方向。另一方面,单片机系统仍然存在资源有限等缺点,容易出现效率过低的一些问题。本文根据单片机系统及单片机C 语言的特点,给予了一些提高单片机系统运行效率的一些办法,希望可以为广大单片机从业人员提供可借鉴的实用技巧。