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


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

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

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

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

文章插图
越是高级语言的编程越是框架性强 。可移植性强 。单片机编程适合简单功能的产品 。比如常见的MP3,扫地机 。以及玩具功能来回就是几个功能 。没有特别复杂的功能 。如果后续功能非常多而且界面操作非常繁琐就可以考虑使用嵌入式编程或者更加高级一点的编程语言了 。永远都是适当的场景适用适当的编程语言 。无所谓对错 。
希望能帮到你 。
其他观点:
菜农从1981年开始就涉足与嵌入式领域的编程 。开始是汇编语言和宏汇编语言 。后来是C语言及C++语言 。其他语言可能有 。但很少且无大出路 。
因为嵌入式领域的编程与硬件有关 。特别是芯片里的中断向量即函数指针 。而C和C++被其他编程语言攻击和被抛弃的就是函数指针!
而嵌入式领域最需要的就是函数指针 。它与结构和联合 。可以构成“COM接口技术” 。为芯片的中断向量或函数指针即地址加密 。
而其他编程语言大多没有函数指针 。故无法满足嵌入式领域编程的特殊需要 。故以后或永远不可能完全替代C或C++ 。除非他不想保护他的代码被篡改或产品的克隆 。
【JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?】
JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?

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

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

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

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

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

文章插图
其他观点:
JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?

文章插图
问题里说的是单片机 。那首先你得知道什么是单片机 。根据不同的内核 。单片机一般有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语言了 。

推荐阅读