c语言编译机器码,[转载]单片机C语言到机器码的全过程

我们平时做单片机编程,最常使用的是C语言和汇编语言两种,但是最终下载到单片机内部的,却是HEX文件里的二进制机器代码,很多同学不懂这个过程是如何转换的。

我们的程序开发环境,比如KEIL和伟福等等,都是可以使用C或者汇编语言来编程的。对于C语言来讲,一旦我们编程完毕,就可以点击编译,编译的过程,实际上首先通过

“编译器”将C语言翻译成汇编语言,再通过“汇编器”将汇编语言转化成机器代码,最终可以下载到单片机中的是机器代码。

细心的同学能够看出,我写的“C到汇编”,是“翻译”,"汇编到机器代码",是“转化”。对于编译器来讲,将C转化成汇编的时候,不是一一对应的关系,也就是说几行C代码,可能翻译成几十行。而汇编语言和机器代码,从某种意义来讲,是一个东西,两者是一一对应的关系。因此,如果我们直接使用汇编语言写的程序,就可以直接跳过“编译器”,通过汇编器将我们写的汇编语言转化成机器代码。

我们早期的程序员,大多使用汇编代码。通常程序员自己写的汇编代码,比编译器转化的汇编代码效率要高,执行速度快,占用空间也小。随着高级语言的诞生,CPU速度的提升和程序存储空间的不断增大,我们开始使用高级语言C来编写程序代码。C语言开发的优势在于开发方便,移植容易,可维护性强,有类似的项目,直接移植过来,不需要重复开发了。

但是这并不意味着汇编代码被淘汰了,汇编语言的意义,更重要在于可以通过汇编语言,可以清楚的理解CPU内部的结构及其程序运行模式。熟练掌握汇编语言对于今后学习深入的嵌入式操作系统非常有好处。

因此我建议:作为初学者在学习单片机技术的过程中,如果想要上手快,迅速学会做点简单的东西,可以直接用C来编程。如果你想深入学习软硬件开发,将来深入的硬件底层学习,成为这个行业的高手,基础打牢固点,建议先用汇编做两年,对于你今后的成长非常有用的。

你的师兄们没说错,你应该用C,简单来说:

1. C上手快,因为比汇编更符合我们的思维方式对吧

2. C比汇编容易驾驭,一旦程序开始变得复杂了,C程序相对容易维护的优势会非常明显

3. 标准C是“跨片子”的,汇编指令则根据不同的片子可能会不一样

4.

现代的C编译器非常智能,你手写的汇编代码很难超过它生成的(除非,你是非常NB的老手),因为编译器一般比你更“懂”CPU的结构,更知道应该生成什么样的指令。

5.你团队(或是身边的人,如师兄)的人都用C的时候,你想问别人问题,你应该迁就他们,而不是他们迁就你。

所以,不需要迷茫啦,看上面你就知道,其实C不难掌握,你担心什么呢,花几个星期时间就好啦。

当然小宋老师说的很对。你有时间的话,深入地掌握一种汇编也是有益无害的,多一种知识就能多一份解决问题的能力。学汇编能让你理解你用的片子,同样会提高你对C的理解的。对提高开发能力有益无害。

至于说,深不深入学51,则是仁者见仁的问题,要换我,我会建议你,深入掌握一种51核的MCU,将常用的片内外设的用法(包括电路连接和编程)都弄懂,就好了。

花时候学类似的片子,不如学算法、学数学、学电路、学点数字信号处理,学点操作系统知识,HIAHIA

总之就是不建议你把时间花在有量变没质变的事情上

学了51,再往前,你可以花时间弄RTOS,使用带操作系统ARM开发,或是学习DSP芯片的开发,或是学FPGA,总之,学习那些能给你带来新思维方式的技能,而不是总停留在一个层面上跑圈圈。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值