您好、欢迎来到现金彩票网!
当前位置:满堂彩 > 浮点变量 >

如何写出高效优美的单片机C语言代码

发布时间:2019-04-30 22:01 来源:未知 编辑:admin

  程序能跑起来并不见得你的代码就是很好的c代码了,衡量代码的好坏应该从以下几个方面来看

  应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。但是在KEIL中则相反,使用数组比使用的指针生成的代码更短。

  能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。在ICCAvr中,可以在Options中设定使用printf参数,尽量使用基本型参数(%c、%d、%x、%X、%u和%s格式说明符),少用长整型参数(%ld、%lu、%lx和%lX格式说明符),至于浮点型的参数(%f)则尽量不要使用,其它C编译器也一样。在其它条件不变的情况下,使用%f参数,会使生成的代码的数量增加很多,执行速度降低。

  通常使用自加、自减指令和复合赋值表达式(如a-=1及a+=1等)都能够生成高质量的程序代码,编译器通常都能够生成inc和dec之类的指令,而使用a=a+1或a=a-1之类的指令,有很多C编译器都会生成二到三个字节的指令。在AVR单片适用的ICCAVR、GCCAVR、IAR等C编译器以上几种书写方式生成的代码是一样的,也能够生成高质量的inc和dec之类的的代码。

  说明:位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。

  说明:在有内置硬件乘法器的单片机中(如51系列),乘法运算比求平方运算快得多,因为浮点数的求平方是通过调用子程序来实现的,在自带硬件乘法器的AVR单片机中,如ATMega163中,乘法运算只需2个时钟周期就可以完成。既使是在没有内置硬件乘法器的AVR单片机中,乘法运算的子程序比平方运算的子程序代码短,执行速度快。

  说明:通常如果需要乘以或除以2n,都可以用移位的方法代替。在ICCAVR中,如果乘以2n,都可以生成左移的代码,而乘以其它的整数或除以任何数,均调用乘除法子程序。用移位的方法得到代码比调用乘除法子程序生成的代码效率高。实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:

  对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作全部集合在一起,放到一个init的初始化程序中进行。

  两个函数的延时效果相似,但几乎所有的C编译对后一种函数生成的代码均比前一种代码少1~3个字节,因为几乎所有的MCU均有为0转移的指令,采用后一种方式能够生成这类指令。在使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码更少1~3个字母。但是在循环中有通过循环变量“i”读写数组的指令时,使用预减循环时有可能使数组超界,要引起注意。

  在这两种循环中,使用do…while循环编译后生成的代码的长度短于while循环。

  在程序中一般不进行非常复杂的运算,如浮点数的乘除及开方等,以及一些复杂的数学模型的插补运算,对这些即消耗时间又消费资源的运算,应尽量使用查表的方式,并且将数据表置于程序存储区。如果直接生成所需的表比较困难,也尽量在启了,减少了程序执行过程中重复计算的工作量。

  写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。

  2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。

  如果编译不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。

  _ D AT E _宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。

  源代码翻译到目标代码的时间作为串包含在_ T I M E _中。串形式为时:分:秒。

  如果实现是标准的,则宏_ S T D C _含有十进制常量1。如果它含有任何其它数,则实现是非标准的。

  需要注意的是凡宏定义里有用#或##的地方宏参数是不会再展开.

  INT_MAX和A都不会再被展开, 然而解决这个问题的方法很简单. 加多一层中间转换宏. 加这层宏的用意是把所有宏的参数在这层里全部展开, 那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数.

  文章出处:【微信号:wujianying_danpianji,微信公众号:单片机精讲吴鉴鹰】欢迎添加关注!文章转载请注明出处。

  中国硬件创新大赛网络培训会—技术培训篇如果你就干这行,毫无疑问你不能错过这次直播;如果不是,可能你不一定喜欢单片机,也不

  中国硬件创新大赛网络培训会—技术培训篇如果你就干这行,毫无疑问你不能错过这次直播;如果不是,可能你不一定喜欢单片机,也不

  动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h....

  单片机EM78447A接收来自传感器的信号后发出晾衣服架收缩或伸张功能的指令,使晾衣服架自动收缩或伸....

  随着单片机的频率和集成度、单位面积的功率及数字信号速度的不断提高,而信号的幅度却不断降低,原先设计好....

  请问CJMCU-115或者GY-33传感器的效果如何,是否没有色差? 采集到的16位AD值怎么转换成RGB值? 全部积分奉上,谢谢...

  本文档的主要内容详细介绍的是的基于51单片机的交通灯正倒计数器程序免费下载。

  MSP430 单片机的程序设计可以使用汇编语言,也可以使用 C 语言,这一部分将讲述这些内容。如果使....

  学习瑞萨R5F100LE单片机,按照入门教程安装了cubesuite+编译软件,仿真下载里面的例程,然而却仿真下载不进去,提示:No res...

  单片机中的定时/计数器都能有多种用途,要通过定时/计数器的方式控制字来设置,需要的用途。在单片机中有两个特殊功能寄存器与定...

  1、首先确保单片机用TTL时候能够在终端上打印输出 波特率 9600 2、买了两块蓝牙、并且进行了配对,成功! 设置了波特率为960...

  简单给大家分析一下嵌入式C语言编程时用到的除法与移位。 除法土豪 除法在嵌入式微处理器里可算是一个消耗大户,...

  要求:LED点阵显示屏是通过PC机将要显示的汉字字模提取出来,经过USB端口传输给下位机,然后通过RFM12无线模块将数据发...

  第9款:虚拟示波器,这是一款可以在电脑上使用的虚拟示波器软件,可自动扫描串口,并设置多种波特率,显示....

  我写的是秒表程序,但是仿真的一直显示如下图所示: 程序如下: [code]#include #d...

  本文档的主要内容详细介绍的是大量元器件原理图SCHDOC文件原理图库合集免费下载包括了:电阻电容电感....

  本文档的主要内容详细介绍的是Altium Designer元器件原理图库SchLib资料免费下载包括....

  本文档的主要内容详细介绍的设计使用51单片机实现矩阵键盘模拟密码锁的C语言代码免费下载。模拟密码锁,....

  RISC-V会是一道曙光吗?RISC-V与RUST相遇引发操作系统教学新尝试身为研究操作系统的老师,陈渝认为,RISC-V精简指令集听起来属于硬件范畴,但是其实RISC-V与软....

  本文档的主要内容详细介绍的是超级单片机工具软件应用程序合集免费下载包括了:51波特率计算应用程序,超....

  单片机程序下载器或在线仿真器。这个设备一般没有通用的,单片机系列不同,仿真器也不同。直接上某宝,搜“....

  介绍一种基于 MC51单片机控制的 PWM直流电机脉宽调速系统 。系统利用 MC51单片机的定时器来....

  通过串口发送at指令,简单本文档的主要内容详细介绍的是使用STM32系列单片机发短信的源代码资料免费....

  第一节:吴坚鸿谈初学单片机的误区。第二节:delay()延时实现LED灯的闪烁。第三节:累计主循环....

  讲授MATLAB语言基础入门知识,介绍MATLAB产品的体系、MATLAB桌面工具的使用方法,重点介....

  在电子测量领域中,频率测量的精确度是最高的,可达10—10E-13数量级。因此,在生产过程中许多物理....

  单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片....

  PHP种介PHP是一种用于动建动动WEB页面的服务端脚本语言。如同ASP 和ColdFusion,用....

  简单总结一下原因:巧妙运用C语言静态的,内联函数直接操作寄存器。当然,这是其中重要的原因,还有一些其....

  1. 第一台电子数字计算机发明的年代和名称。 1946 年、ENIAC。 2. 根据冯·诺依曼提....

  ST72F32A和ST7232A设备是为5V工作范围设计的ST7微控制器系列的成员。ST7的增强指令....

  主要论述了系统的总体设计思想和直流参数测试单元的设计思想、 原理、 技术指标、实现以 及电路特点等。

  十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的是交通信....

  本文档的主要内容详细介绍的是STC89C52单片机的输出电压型和输出LED型电路原理图免费下载。

  本文档的主要内容详细介绍的是12864A不带字库的C语言程序免费下载。

  ISP下载,简而言之就是不需要把单片机从板子上面拆卸下来,直接在板子上通过串口等方式,把程序下载到....

  从8048 开始,“单片机”即成为广受欢迎的代名词,而8051 更成为机电、电子相关专业必学的内容,....

  Microchip推出首款基于Arm®内核的单片机——SAMV71Q21RT耐辐射单片机和SAMRH71抗辐射单片机SAMV71Q21RT和SAMRH71允许软件开发人员在迁移到宇航级元件之前着手使用SAMV71 C....

  该系统采用 TI 公司专用 PFC 整流控制芯片 UCC28019 作为控制核心,构成电压外环和电流....

  本系统以STC89C52单片机最小系统为核心,结合矩阵键盘、1602LCD和报警系统组成。系统能完成....

  以STC89C52单片机最小系统为核心,结合矩阵键盘、1602LCD和报警系统组成。系统能完成锁闭状....

  本文档的主要内容详细介绍的是设计使用STM32单片机和CS9505进行电能测量的资料说明。

  本文档的主要内容详细介绍的是如何使用C语言实现一个比较简单的猜数游戏的程序免费下载

  看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到M....

  本文档的主要内容详细介绍的是在单片机按下键盘能够在数码管上显示键盘值的实验程序免费下载。

  很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大....

  80C51 单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好这里介绍的是如何用 80....

  本文档的主要内容详细介绍的设计单片机51波特率计算工具应用程序免费下载。

  随着我国社会主义市场经济的快速发展和人们生活水平的不断提高,汽车保有量呈逐年上升趋势。与此同时,为了....

  STM32F103XC、STM32F103XD和STM32F103XE性能系列集成了高性能ARM®C....

  基于51单片机的浇花系统,可进行湿度显示,按键设置湿度上下限从而自动浇水,包含原理图,程序代码,pc....

http://login4porn.com/fudianbianliang/120.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有