您好, 访客   登录/注册

单片机C语言编程的常见问题分析

来源:用户上传      作者:方春华

  摘要:随着计算机技术的不断发展,使得如今的单片机仿真器普遍支持了c语言程序的调试,这无疑是对单片机使用c语言提供了极大便利。虽然,单片机内中半导体芯片的体积十分微小,但却容纳了众多的元器件,包括CPU、半导体存储器、I/O接口以及中断系统。与此同时,基于c语言本身兼具高级语言和汇编语言的双重特点,加之c语言能够直接操作单片机硬件,这为c语言编程在单片机中的应用创造了良好的条件。本文通过概述单片机系统,深入分析单片机c语言编程的常见问题,并根据实际情况提出解决单片机c语言编程问题的策略,为单片机c语言编程的应用提供可参考的资料。
  关键词:单片机;c语言;编程问题
  中图分类号:TP311 文献标识码:A
  文章编号:1009-3044(2019)30-0237-02
  单片机的开发主要依赖于大量的编程与算法设计,而通过对单片机编程语言的审视,我们不难发现:传统单片机运用最多的当属汇编语言,而针对c、c++等高级编译语言的运用却十分稀少。而随着计算机技术的不断发展,人们对单片机系统功能需求的不断提升,所以积极将c、c++一类的高级编译语言运用至单片机中已然成为时代发展的必然趋势。
  1单片机系统
  1.1单片机的定义
  单片机的英文全称为“single chip microcomputer”,中文翻译为单片微型计算机。其主要部件便是半导体芯片。虽然,半导体芯片的体积十分微小,但却容纳了众多的元器件,包括CPU、半导体存储器、I/O接口以及中断系统等。至于单片机则是由众多包含此半导体芯片的硬件所构成。
  1.2单片机的系统组成
  就单片机系统而言,其与普通计算机同样拥有硬件与软件系统两大重要组成部分。其中,硬件系统主要包含了上述所提半导体芯片中集成的各类元器件,如CPU、半导体存储器等。而软件则是由众多的主程序与子程序所共同组成,而这些主程序与子程序则均是借助汇编或c语言所编写而成,其主要功能便是监控系统。
  1.3单片机的功能特点
  单片机虽是微型电子计算机,却仍有着极其丰富的功能。如基于单片机的元器件本身便具有较高的基础高难度,故在大规模以及超大规模的集成电路中均适用,且具体的运用还能增强电路的抗干扰能力与可靠性。其次,同样基于单片机元器件的高集成度,故其价格也相对较为低廉。再者则是单片机具有强大的控制功能,而相关功能均是由指令输入来实现;最后则是单片机本身对电压要求较低,仅是2.2甚至更低的电压便可运行,如此低功耗也十分符合环保低耗的相关要求。
  1.4单片机的应用范围
  单片机具有强大的功能,故使得该设备于国防、军事、工业、农业等诸多领域均有着十分广泛的运用。不仅如此,在众多与家庭相关的系统及设备中,单片机也有着良好的运用价值,诸如机电一体化设备、智能仪表仪器、分布式多机系统等。
  2单片机C语言编程的常见问题
  虽然单片机的语言编辑器功能也十分强大,但也并非能可支持所有的数据类型。好在当前所流行的数据类型,当前的单片机语言编辑器均能良好兼容,且基于单片机本身所具有的位数数据存储功能,故能通过合理应用各种字符集来构建完整的数据库。浮点型数据这种数据类型也常常会应用到语言编辑中,且最常见的一种方式就是逻辑开头。
  就上述语言类型外,单片机除了能完美兼容外,且还支持特殊功能的寄存。而所谓的特殊功能寄存,即指单片机并非只能单纯的存储数据,而是能访问数据存储的任意位置。虽然,基于各种强大的功能使得单片机的运用范围也十分广泛,但其语言却有着十分明显的缺陷。就以市面上最常见的单片机为例,当前,市面上最常见的单片机通常是八位的,也便是能同时计算二的八次方个数据,而在实际运算过程中,为切实提升代码的准确率,我们通常是通过减少单片机位数长度的方式来降低其数据计算量,以此将能避免占用过多内存。同样,在语言设计时通常会采取减少程度执行过程中的预算次数或减少字符串总长度的方式来降低单片机的数据计算量。但若所需计算的数据类型为浮点型数据,这便需要得到内部函数的支持方能精准计算,故我们在运用数据时,需务必做到对数据类型的合理选取,以此方能减少代码长度,并保证代码整体结构的科学性与合理性。
  3解决单片机C语言编程中常见问题的策略
  为了扩大单片机c语言编程的应用范围,便需要积极解决单片机c语言编程中最常见的一些问题,优化c语言的单片机开发环境、合理分配数据存储器、与汇编语言的混合编程、完善C语言的单片机开发步骤。
  3.1优化C语言的单片机开发环境
  当前,就单片机程序的开发软件而言,运用最广泛的当属KEIL C51。该软件不仅集合了编辑、编译以及仿真等程序设计所必备的功能外,还能支持不同公司生产的MCS51芯片。不仅如此,KEIL C51的操作界面亦十分友好,且该软件内部不仅集成了c语言,还同时支持其他的汇编语言。当然,该软件也因此而具备了强大的变成与调试功能。除此之外,基于KEIL C51的开发环境亦包含了诸多程序,包括编译器、汇编器、项目管理器、调试器以及实时操作系统等。故也方便对目标、组以及单个文件的管理。至于KEIL C51最主要的特性,因其操作界面十分友好,故用户能可在实际运用过程中快速熟悉。与此同时,基于源代码编辑器还为代码编辑创造了一个极为方便的环境,故编译人员可随时基于编辑器来对代码予以调试,以此将方便编译人员快速找出前期所写代码之中是否存在错误以及在代码完成后对其予以合理的优化。
  3.2合理分配数据存储器
  就单片机的内部数据存储器而言,通常仅有几百字节大小。但若以添加外部存储器的方式来提高单片机的数据存储量,则将导致硬件成本的大幅增加。且因外部存储器的加入会让原本较为简便的系统变得愈发复杂,故针对片内存储器空间的合理利用对单片机开发而言无疑是极为关键的一环。对此,若能基于C语言来调用存储器的覆盖技术,则可在连接性的程序时,将此前被其他程度所占用的存储空间重新定义,是之能转化为另一程序段的变量。而当另一程序停止运行后,这些存储器空间又将再度释放并供其他程序使用,以此将能大幅提升单片器存储器内部空间的应用效率。至于存储器中的变量,众所周知,存储器变量主要有靜态与动态之分。其中静态变量仅能被调用而无法被释放,而动态变量则可以被释放。对此,针对程序设计过程涉及局部变量的使用时,编译人员需务必采取动态变量,如此方能进一步提高内部数据存储器的使用率。除此之外,考虑到C语言中的程序中间结果以及参数传递均是依靠内部寄存器来完成,但若内部存储器本身的空间不足,则反而会对程序带来负面影响。故在设计相关程序时,编译人员需务必对寄存器空间予以详尽考量,如此方能最大限度避免计算错误的出现。   3.3与汇编语言的混合编程
  虽然,C语言编程于绝大多数场合的运用均可达到预期的目标,但并不适用于诸如实时时钟等对执行效率要求较高的系统。至于汇编语言,因其原本便是一种直接与硬件打交道且具有较高代码执行效率的汇编语言,故积极将c语的使用过程过程与汇编语言相结合,将能对C语言无法做到之事予以有效弥补。如结合C语言和汇编语言的优点来予以混合编程,便能满足实时时钟系统设计的诸多需求。而这也正是当下单片机开发最流行的编程方法。除此之外,在绝大多数单片机系统中,c语言与汇编语言的结合还包含了以下两种状况:一是在汇编程序与C语言程序分属不同模块的情况下,系统的子程序,也便是会变成度模块的变量及函数部分通常是由c语言来进行调用。而另一种则是嵌入式汇编,在嵌入式汇编中,通常是在c语言程序中嵌入一段汇编语言程序,后在不同模块的调用下又将分为若干个C程序与汇编程序模块。而此时的C语言模块通常是作为程序的主体框架来辅助汇编程序完成相应的任务。当然,在此过程中,C语言与汇编语言模块必须基于完整的约定,否则将导致数据交换出错。除此之外,就嵌入式汇编而言,因c语言使用使得程序内部可自动生产精炼的代码,由此可极大减少系统的运行时间,且当内部无复杂跳转时,该嵌人式语言亦将自动完成汇编。
  3.4完善C语言的单片机开发步骤
  运用C语言进行单片机程度开发时,通常需经历以下几大重要步骤。依次为程序代码的编写、程度代码的编译、目标代码的连接以及目标代码的转换等。就以上程序而言,最重要的当属代码编写完成后的调式,其步骤关系到编译文件未能移植到單片机之上以及在编译文件移植到单片机上后能可顺利执行。至于单片机的开发步骤则通常包含如下四步。分别为软件的安装、源文件的创建、编译与调试以及最终的HEX文件生成。其中,软件的安装主要是通过登录KEIL的官方文件下载软件的商业版安装包。通过点击其解压后的安装包并双击其中的SETUP.EXE文件,在勾选其协议条款的同意按钮并按提示输入序列号后,后续的安装步骤将自动完成;而源文件的创建则是再打开软件后创立新的项目,后在新创利的项目中编写代码便可生成C与源程序的源文件。编译与调试的主要任务便是检查并调试源代码程序,以找出代码之中错误并加以及时的改正,以免影响到后续的软件运行。至于最后的HEX文件生成则需借助编译器写入单片机芯片中,以此为后续的仿真调试提供条件。
  总之,C语言本身兼具高级语言和汇编语言的双重特点,加之该语言能直接操作单片机硬件,故使得该语言于单片机制造中有着绝佳的发展前景。而目前,该技术已然在众多领域得到了极其广泛的运用,甚至在单片机开发中,C语言已然取代了其他汇编语言并成了最合适单片机开发的语言。由此可见,c语言在单片机技术中的运用还将迎来更大的发展空间,因此,我们也必须要对该语言的使用给予高度重视。
转载注明来源:https://www.xzbu.com/8/view-15070440.htm