首页编程语言单片机c语言与汇编语言混合编程,单片机c语言与汇编语言混合编程实例

单片机c语言与汇编语言混合编程,单片机c语言与汇编语言混合编程实例

cysgjjcysgjj时间2024-05-23 19:32:37分类编程语言浏览23
导读:单片机用C语言编程很好学,为什么还要用汇编呢?JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?单片机用C语言编程很好学,为什么还要用汇编呢?目前很多主流单片机都是支持C语言编写,厂商会提供相应的C语言库,编译器也大都支持C语言开发,C语言上手快学习成本低,只是应用层面的话其实C语言就差不多够用……...
  1. 单片机用C语言编程很好学,为什么还要用汇编呢?
  2. JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?

单片机用C语言编程好学,为什么还要用汇编呢?

目前很多主流单片机都是支持C语言编写,厂商会提供相应的C语言库,编译器也大都支持C语言开发,C语言上手快学习成本低,只是应用层面的话其实C语言就差不多够用了。但是使用C编写最后还是会被编译器变成汇编代码,实质还是在写汇编。汇编效率高,对机器直接操作,更加底层所以想深入的学习单片机,汇编是不可不学的,并且一般最底层设置都是汇编写的,还有不少底层设置是无法用C去调用或者改写的,这个时候看懂汇编和使用汇编就很重要了。

C语言是发展趋势,汇编可以帮助学生熟悉单片机内部结构

首先汇编语言和C语言都是编程语言,汇编是一种机器语言直接面对底层,与单片机底层硬件构架息息相关,相对于C语言,是一门低级语言,C语言面向过程的语言,在编译执行会转为汇编在生成单片机可执行文件。是一门高级语言,两种语言各有优缺点。

1学习难度。

单片机c语言与汇编语言混合编程,单片机c语言与汇编语言混合编程实例
图片来源网络,侵删)

汇编因为的理解难度和开发难度比C语言大,所以学习难度大,都是对寄存器操作,学习汇编就要学习这个单片机的硬件结构和基本组成、存储器访问方式、单片机I/O操作时序、定时计数器、中断处理、指令系统、寻址方式等知识点;而且每个系列芯片的内部寄存地址和寄存器都有差异,维护起来也十分困难。

2执行效率

汇编实时性比C语言好,占用单片机***少,生成的执行文件更小,汇编语言程序直接被转换成机器指令。而C语言编译过程会先形成汇编,在转为机器语言。

单片机c语言与汇编语言混合编程,单片机c语言与汇编语言混合编程实例
(图片来源网络,侵删)

3移植性

C语言比汇编移植性好,程序可读性比汇编要强。实现相同功能,C语言的代码数量会比较短,对于汇编来说,每一种单片机汇编语言都不一样。所以移植性差。

C语言通过结构体,指针映射寄存器地址,当有需要时候,只需要简单更改寄存器地址,或者更改寄存器定义,即可满足程序和工程的移植。

单片机c语言与汇编语言混合编程,单片机c语言与汇编语言混合编程实例
(图片来源网络,侵删)

4,调试

要看是什么单片机。

32位单片机

如STM32。用C语言很合适,绝大多数工作都可以而且应该用C或者更高级的语言完成。只有极少数对性能或代码空间要求高的部分需要用汇编语言实现。

这类单片机在实际工作中也很少用到汇编,C语言基本能满足开发各种功能的需求

8位单片机

如51系列,部分***R。性能低,C编译器也不够标准。尤其因为历史上C编译器较昂贵,所以在这些平台上有大量汇编语言开发的积累。

另外,低端单片机往往实现的是简单逻辑,用汇编语言开发惯了的人,也没有太大动力改用C语言。

这样以来,学校课程中使用汇编语言也就正常了:既体现了一定的历史惯性、也有助于更深入的理解单片机系统。

自己学习来说,汇编语言了解一下还是不错的。深入学习还是选C,以后单片机上直接用汇编的会越来越少。

现在一般单片机都支持C语言和晦涩难懂的汇编语言,在许多介绍单片机应用技术的教材中有相当一部分是用汇编语言编写的这说明汇编语言在学习单片机和编写单片机程序时尤其独特的优势,现在我把学习单片机使用汇编语言的一些优势来发表自己的看法,希望能够通过我说的这几点给学习单片机的朋友们一个参考意见并顺便解答一下这个问题

第一点单片机汇编语言在执行效代码效率非常

虽然单片机汇编语言在刚学初期会显得“晦涩难懂”但也并不是“一无是处”,在有些方面是单片机C语言所不能企及的,比如汇编语言首先在机器码生成方面其效率要比C语言高20%,所以用汇编语言编写程序能够减少占用单片机里的寄存器单元,特别是对于容量小的单片机而言很重要。总之汇编语言要比C语言执行效率更高。

第二点单片机汇编语言执行速度

我们知道任何编程语言最终都要生成单片机能够“识别”和执行的二进制码,由于汇编语言可以直接访问单片机的内部寄存器,所以单片机的汇编语言执行速度要比C语言快的多,可以实施精细而准确 的控制,在一些实时控制要求比较严格的控制场合一般要求用汇编语言。

第三点单片机汇编语言能够帮助有助于了解单片机内部的结构,尤其是寄存器

由于汇编语言的每条指令与单片机的指令码是一一对应的,所以通过学习单片机的汇编语言有助于学习单片机内部结构组成以及它的外设。尤其是对熟悉单片机内部的各种寄存器有很大的帮助。

鉴于以上三点我认为,单片机C语言编程和汇编语言编程各有各的特点,要想学好单片机并运用好单片机就要把这两种单片机语言都要学好才行。

以上就是我对这个问题的看法,欢迎朋友们参与讨论。敬请关注电子及工控技术,欢迎大家点赞

现在常见的用汇编的一些场合,往往有严格的时间要求。比如中断,特别是arm的快速中断,还比如一些对时间要求非常高的测控场合,可能要求微秒甚至纳秒级别的响应速度。这些[_a***_]在编程的时候有可能会一条指令的执行时间也会考虑。还有一些重复进行运算函数如果重复的次数多,又对时间有要求,那函数的执行时间又需要一条一条指令的扣。

还有一些场合,应用的cpu ,比如有些pic单片机,只有1k甚至512字节的空间,rom空间比较小,c语言优化后的编译代码,可能还是不如纯粹的汇编精简,这就需要汇编。

还有一些其他场合也是对代码空间有要求,比如linux启动的bootloader,还有PC上常见的常见文件系统mbr代码,也需要用汇编来编写。

此外对于单纯的学习来讲,汇编语言跟硬件的关系更密切,更直接,学习汇编更有利于理解单片机的结构。

java、C、C++python同样是高级语言,为什么只有C和C++可以编写单片机程序?

单片机能否提供程序所需的运行环境决定了某种语言能否用于单片机程序的开发。单片机的总线宽度决定了单片机存储空间的大小。其中,拥有32位总线的单片机的存储空间可达4GB,装个Linux差不多可以跑各种程序了。这里我们只讨论总线宽度在16位以下的单片机。

单片机上没有I/O设备,只有I/O接口,程序要以机器码的形式写入随机存储器(就是PC的内存)。主流单片机的总线宽度一般是16位,比如,51单片机。存储器空间最大能做到64K。一些单片机的存储空间只有256个字节甚至更小。这么小的存储空间容不下操作系统,所以能在单片机上跑的程序都得是原生的机器码。C/C++都能直接编译成原生的机器码程序,因此,广泛用于单片机程序开发。Java需要虚拟机,基本上不能在单片上运行(JVM有几百M)。Python可以编译成C语言的原生程序,有可能在单片机上运行。但是,Python的程序里一般都带着一庞大的标准库,简单移植到单片机上不太可行,需要做一些定制化改造才有可能。这类语言不能移植到单片机上的原因主要他们为了能在不同的操作系统上移植,使用了独立的运行环境,而这个环境的体量太大装不到单片机上。

最后科普一下高级语言的概念。机器码被称为第一代语言,汇编被称为第二代语言。其他语言都是高级语言。C/C++是第三代语言。JAVA和Python被称为3.5代或者是第四代语言。主要是因为他们废除了内存操作指令。还有更高级的语言,SQL因为没有了变量定义(准备内存空间)被称为第四代或第五代语言。

菜农从1981年开始就涉足与嵌入式领域的编程,开始是汇编语言和宏汇编语言,后来是C语言及C++语言,其他语言可能有,但很少且无大出路。

因为嵌入式领域的编程与硬件有关,特别是芯片里的中断向量即函数指针,而C和C++被其他编程语言攻击和被抛弃的就是函数指针!

而嵌入式领域最需要的就是函数指针,它与结构和联合,可以构成“COM接口技术”,为芯片的中断向量或函数指针即地址加密。

而其他编程语言大多没有函数指针,故无法满足嵌入式领域编程的特殊需要,故以后或永远不可能完全替代C或C++,除非他不想保护他的代码被篡改或产品的克隆。


从事编程十几年,J***A、C、C++、Python这四种编程语言都玩过,前三种玩的比较多,python做为兴趣爱好或者玩脚本的时候弄过,编程语言在使用的时候主要还是适合不合适,单片机使用的场景属于功能简单,成本相对较低,现在也有高配版的单片机,本来单片机是不带系统的,非要硬扯到带系统的,从成本上考量就不是那回事了,成本主要包括两个方面有硬件成本,还有研发难度的成本这都是需要考虑的事情。

单片机开发语言C语言和汇编,别的语言还真不好上手,编程语言能力强大与否关键无外乎是不是能够控制底层的硬件,往往是一些门外汉喜欢编排一些故事,搞成什么编程语言的鄙视链条,真正的程序员底层的编程语言会羡慕上层编程语言的灵活性,上层的编程语言羡慕底层的编程人员能够控制硬件觉得是一件很神奇的事情,曾经面试过一个做了很多年j***a的工程师,居然想着拿出两年的时间来学习C语言,最后真还是降低工资标准进来了公司

单片机编程主要是操作硬件的寄存器多一点,在编程语言方面使用的指针多一些,基本上while搭配中断把编程工作就差不多搞定了,如果硬要上j***a,python主要运行环境受不了,在运行j***a之前首先要把虚拟机给移植上,就单片机那点内存压根不是个,所以不同的编程环境不同的搭配,没有必要强求,无论是C/C++编程还是高级语言j***a,python在使用过程中编程套路都接近。

如果真要想在单片机上运行虚拟机还不如直接找个有操作系统的嵌入式设备,单片机完成的就是简单能够容易实现的功能,太多功能模块化的功能就不适合在这上面,解释性的语言执行需要一个运行环境不像单片机那么单纯,直接把全套的环境都运行在一个程序里面,单片机编程的时候有时候发现明明只有几行代码编译出来却有几百k,主要所有的驱动以及底层的实现都统统打包在一个可执行文件里面,嵌入式的运行环境相对来讲就比较复杂了,首先要把操作系统给安装到位,还有各种驱动提前准备好。

越是高级语言的编程越是框架性强,可移植性强,单片机编程适合简单功能的产品,比如常见的MP3,扫地机,以及玩具功能来回就是几个功能,没有特别复杂的功能,如果后续功能非常多而且界面操作非常繁琐就可以考虑使用嵌入式编程或者更加高级一点的编程语言了,永远都是适当的场景适用适当的编程语言,无所谓对错。

希望能帮到你。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。转载请注明出处:http://www.wnpsw.com/post/13636.html

单片机语言汇编
什么叫全球互联网技术研究,什么叫全球互联网技术研究中心 互联网技术发展现状简介,互联网技术发展现状简介怎么写