{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

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

Coding01Coding01 回答10 收藏1
收藏问题

10条回答

piapia

piapia

回答于2022-06-22 19:00

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

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

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

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

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

希望能帮到你。

评论0 赞同0
  •  加载中...
ddongjian0000

ddongjian0000

回答于2022-06-22 19:00

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

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

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

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







评论0 赞同0
  •  加载中...
vspiders

vspiders

回答于2022-06-22 19:00

谢邀。之前回答过类似的问题,这里再解释一下。

问题里说的是单片机,那首先你得知道什么是单片机。根据不同的内核,单片机一般有51内核单片机和ARM内核单片机,根据位数不同分为8位、16位、32位单片机。单片机不同于电脑的CPU,它集成了CPU、ROM(理解为电脑硬盘)、RAM(理解为内存)以及板载通信总线(SPI、IIC、UART等),高端的单片机还会集成以太网、LCD和USB等功能,看起来就像一台微型电脑一样。

说完单片机再说一下单片机编程,一般的单片机编程都是裸机编程,也就是没有操作系统的单进程程序。程序员通过代码直接操作单片机的CPU寄存器、内存以及其集成的所有外设,所以单片机编程不同于基于操作系统的编程。前者直接操作硬件层,从选择编程语言上来讲,汇编是最好的选择,因为它执行效率高,可以直接对寄存器、内存进行操作。但是不同的单片机指令集是不同的,汇编可移植性太差,给一个单片机写的程序在不同指令集的单片机上不能运行。

说到这很多人会想到可以用高级语言代替汇编语言,然后再通过编译器将高级语言编译成汇编,最后生成机器语言给单片机执行。这是个不错的想法,那如何选择高级语言呢C、C++、JAVA、Python还是C#等。这里面最好的就是C语言,为什么呢?通俗来讲,C语言诞生之初就是用来替代汇编的,提高代码可移植性,而且C语言具有汇编的很多特性,比如其可以通过指针操作寄存器、内存地址,C语言语法简单,更贴近硬件层,执行效率高。

这里提到了执行效率,计算机专业的同学都知道汇编语言效率最高,C语言效率仅次于汇编,因为C语言在通过编译器生成汇编的时候会产生一些冗余指令。因为编译器也是一个程序,它的编译性能再好,也不如程序员直接写一个汇编程序的执行效率高。

说到这差不多快明白了,C++、Java、Python这类语言我们也可以用于写单片机程序,只要有适应的编译器,将其编译成单片机的机器语言就行了。但是这类面向对象的语言,其语法格式比较复杂,而且执行效率不如C语言,其特性不利于操作硬件寄存器、内存地址等,比如Java设计之初为了避免程序员操作地址,就取消了C++里的指针的概念,另外编译器也是一个程序,编译器也会有bug,编译复杂语言出问题的概率也会增加。

因此,在单片机执行的程序,直接接触硬件层,这类程序要求效率高,出现异常的概率要小,还要具有可移植性,满足这些条件的,好像只有C语言了。

(*^▽^*) 寥寥数语,不知道有没有表达清楚,欢迎对编程、硬件感兴趣的小伙伴点赞加关注。

评论0 赞同0
  •  加载中...
qieangel2013

qieangel2013

回答于2022-06-22 19:00

作为985院校的本硕毕业生以及BAT的Java开发工程师来回答这个问题。

高级语言与低级语言

也许你早就好奇了,什么是高级语言,那对应的有没有低级语言?

简单粗暴的解释,人类直接使用的语言就算高级语言,比如题主提到的,都是程序员编程时候直接使用的,相对于低级语言来说,更具有逻辑性,更容易阅读和编写。高级语言可以认为是对低级语言的封装,因此实现同样的功能,使用高级语言编写的程序更加短小精悍。

而与低级语言相对,就不是给人看的,而是给机器看的语言。所有高级语言在真正执行的时候,都要编译为低级语言,毕竟真正的执行者是机器。这里我们可以将机器语言和汇编看为低级语言,它们通常使用的是机器识别的01代码已经一些符号。

单片机

单片机其实就是一个微型电脑,除了功能和性能上比我们家用电脑弱很多,其他内部重要构造一应俱全,用来做一些控制家用电器的工作足够了,比如洗衣机,微波炉什么的。

这些单片机通常都是用C/C++编写的。因为他们是编译型语言,是可以直接生成exe文件,然后直接放在单片机内部运行的。而像Java,属于解释型语言,它编译后的class文件是要放在jvm中才能运行的,直接放进单片机,人家根本理解不了。

如果偏要Java写单片机程序,就需要把它的解释器烧进单片机且与单片机对接才行。这样做第一占用单片机有限的空间资源,第二也会影响执行速度。你总不希望你点击微波炉的加热按钮,三秒钟之后它才反应过来开始加热吧。

其实讲到这里,大家基本就明白了为什么C/C++可以编写单片机程序了,因为C本身就是为了编写UNIX操作系统而发明出来的,截止1973年,Unix操作系统已经完全使用C来编写了。作为一个诞生本是为系统开发的语言,它本身就是与单片机编程匹配的,只不过由于种种原因,C语言进一步发展,成为了一种广泛使用可上可下的编程语言,看起来与Java,Python能做一样的事情,但是要铭记的是C大爷永远是大爷。

以上是我的浅见,如果对你有所帮助,欢迎点赞留言与我交流。

我是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。

评论0 赞同0
  •  加载中...
Rango

Rango

回答于2022-06-22 19:00

这个问题很简单,python,java是解释型语言,需要有虚拟机解释器支持,需要更多的内存和cpu处理速度,而c,c++可以直接由编译器生成机器指令,所需要的资源少,单片机可以正常运行。另外python,现在java在设计时就是为了大型程序而生,不适合单片机。

评论0 赞同0
  •  加载中...
h9911

h9911

回答于2022-06-22 19:00

单片机能否提供程序所需的运行环境决定了某种语言能否用于单片机程序的开发。单片机的总线宽度决定了单片机存储空间的大小。其中,拥有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因为没有了变量定义(准备内存空间)被称为第四代或第五代语言。

评论0 赞同0
  •  加载中...
netScorpion

netScorpion

回答于2022-06-22 19:00

这还要根据计算利的发展来说计算机能直接理解语言是机器语言。
后来因为机器语言对人来说难以理解,发明创造出了便于人理解的汇编语言,但最后为了更加便于人理解发展了汇编语言产生了C语言等高级汇编语言,但又发现C语言的缺点进一步发展出了C++,之所C语言能对单片机进行编程是因为C语言是一门面向过程的语言,而Python,亅AvA等是面向对象的语言,而且C语言能通过指针对硬件内的数据进行操控。

本图片来源于百度

评论0 赞同0
  •  加载中...
abson

abson

回答于2022-06-22 19:00

并非不可以,而是芯片厂家没有提供底层支持。


例如java程序的运行需要虚拟机来解释运行,如果厂家所设计的单片机,为其提供了虚拟机支持的话,就能运行java编写的程序。同理Python也行。


但由于单片机对成本和效率要求较高,基于这些考虑,厂家一般都只提供C语言的支持(相关编译工具链、开发工具)


而稍微高阶一点,厂家为单片机提供了C++的工具链,支援了C++编程语言,所以这些芯片平台,也可以用C++来开发单片机程序

评论0 赞同0
  •  加载中...
wupengyu

wupengyu

回答于2022-06-22 19:00

首先,C语言是比汇编高一个等级的语言,编程风格是面向过程编程,数据操作比较简单,且易实现,编写起来比汇编容易;C++是继C语言上起来的语言,有自己的库和很多通用的模板类,编程风格是面向对象,对数据处理进行了严格的封装,处理起来不太方便;Python就比较高级了,有更为专业的库,使用时只需调用接口函数。

评论0 赞同0
  •  加载中...
atinosun

atinosun

回答于2022-06-22 19:00

簡單的說就是單片机的內存及cpu速度有限。像Java 這類需要JVM吃內存怪獸的直接淘汰,因為別說在上面開發java,連jvm能否po上單片机都是問題。Python 雖說可以編譯成机械碼,但遠不如c來的簡潔扼要,所以c是最佳選擇。

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<