在单片机C编程时,如何才能使生成的代码具有和汇编一样的效率?

答:如果是使用C语言编程时,不太可能生成的代码具有1:1和汇编一样的效率。
C语言命令要被硬件识别并执行,必须通过编译器编译。编译器分为前端、中端、后端。前端与各种计算机语言写的程序打交道,后端与处理器的基本指令集接轨。所以如果使用C编程时,要达到最高的效率,最好能够很了解所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。
在今后编程的时候,使用编译效率最高的语句,这样就能确保单片机C编程的时候同样的功能不同的C程序,编译效率最高。但是各家的C编译器都会有一定的差异,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%,所以不同厂家的C编译器的编译效率也会有所不同。

生成海报
点赞 0

创世纪

单片机学习,电子制作DIY学习与分享,各种新鲜的,有趣的,好玩的,一起来吧!机器人、无人机、树莓派/Raspberry Pi、arduino、极客、创客等

暂无评论

发表评论

相关推荐

如果已经有了针对某MCU的C实现的某个算法,保持框架不变,对核心的部分用汇编优化,有没有一些比较通用的原则?

答:每个人的编程都有自己的风格与习惯,如果要利用别人的程序,在其中修修改改,如果他的程序并没有很好的模块化的话,建议最好不要这幺做,否则本来预期达到事倍功半,说不定反而事半功倍了。要参考他人的程序当然可以,但是首要是要看懂并理解他人程序的算法精髓,而不是在他的基础上打补丁。而关于算法方面的优化,可以购买一些数据结构的书籍,上面有比较详细的说明。

当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?

答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。

搞单片机开发,一定要会C吗?

答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。 而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。 此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。 综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。