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

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄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元之間
<