對于現在我們從事嵌入式開發的人員來說,C語言好像是必備的技能,也是最常見的開發語言.
但是我們有沒有想過為什么嵌入式開發要使用C語言呢?為什么不使用匯編呢?為什么不使用Java呢?我想從嵌入式開發->反向驗證->正面驗證來聊起.
什么是嵌入式開發?
百度百科說法如下:
嵌入式開發就是指在嵌入式操作系統下進行開發,包括在系統化設計指導下的硬件和軟件以及綜合研發。除暫且分離硬件的EDA研發以外,側重的就是在一定硬件條件下的系統化設計和軟件研發。
在我們平時的接觸中,嵌入式開發一般常用的系統有WinCE,linux,android和一些實時操作系統等等
使用的語言有c,c++或匯編;用高級處理器,arm7,arm9,arm11,或者一些8bit,16bit,32bit單片機等
主流的嵌入式平臺有三種:ARM平臺、DSP平臺和FPGA平臺。
嵌入式為什么不用匯編?
嚴格來說,不是不用,而是不建議用
匯編和C語言都可以直接訪問硬件,可以直接編譯生成硬件識別的機器碼文件,并且匯編的語法較為簡單,生成的可執行文件更小
隨著硬件的發展,內存也越來越大,匯編這些優勢也不再是優勢了,并且匯編難,普通的51用匯編還行,指令不多.
新型的單片機,寄存器成百上千,全靠記憶簡直天方夜譚,復雜的大型項目不是一個人能完成的,匯編的移植性和修改性以及可讀性太差.
當然能熟練掌握匯編,會對單片機的內部結構、讀寫時序等有一個清楚的了解,然后接著學c語言,對整個系統的了解是有幫助的.
嵌入式為什么不用 java 語言寫?
在很多很多年前,java是為嵌入式打造的語言,Java語言設計的初衷就是針對嵌入式的,原來的U-SIM卡,現在新出來的SWP-SIM(NFC)卡里面的程序都是跑的java 代碼。
隨著發展,Java開始在通用平臺上普及開來,并且JAVA是面向對象編程,是編譯器在后面增加大量的東西的才變成機器語言,換而言之,這樣程序無法直接操作內存
比如你定義一個類,最終在內存中實現時,編譯器已經加了大量附加東西。如父類數據結構,VT表指針之類等等。而底層程序主要是操作寄存器和內存地址,必須要精確而直接操作它,所以難以達到
當然,Java需要經過一層虛擬機,效率上不是很好。很多嵌入式項目資源有限,是養不起java虛擬機的。
嵌入式系統和C語言的聯系
操作系統包括內核、驅動等都是使用C語言和匯編編寫的,只有小部分會使用匯編語言,其余絕大部分是C語言。
比如boot的時候會有一些切換處理器模式之類的指令,用匯編干這種活簡單粗暴,代碼量少,寫好了就不需要維護了.
C在操作系統中流行在1970年代Unix出現時就開始了,現在常用的操作系統內核基本上都是由c語言編寫的,所以這是歷史的聯系,更是成千上萬程序員的聯系.
為什么選擇C,要從C語言的特點說起
C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼,并且不需要任何運行環境支持,便能運行的編程語言,其移植性好,能夠在多種不同體系結構的軟件或硬件平臺上運行;
相對來說,C語言在高級語言當中是最貼近物理層面的語言,經過一系列的編譯轉換,最終它會成為0101的機械碼,可以操作硬件,并且具有簡介緊湊、使用靈活的語法機制.
C語言具有很高的運行效率。通過觀察C語言的背景可以看得出:匯編語言 - B語言 - C語言。在芯片上執行的程序:寫匯編執行效率最高,C語言其次,大概在80%左右
最后注意的點
C語言的缺點主要表現在數據的封裝性上,并且語法限制不太嚴格,變量的類型約束不嚴格,對數組下標越界不作檢查等,影響程序的安全性。
我們在嵌入式編程中,要取長補短,用最優的方法,最少的時間,做最對的事情
-
處理器
+關注
關注
68文章
19740瀏覽量
232926 -
C語言
+關注
關注
180文章
7628瀏覽量
139767 -
嵌入式開發
+關注
關注
18文章
1065瀏覽量
48371
原文標題:嵌入式開發為什么不選擇匯編、Java而是C語言呢?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
嵌入式開發:高門檻的系統性工程與 996 的行業困局

BlackBerry QNX推出通用嵌入式開發平臺
代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

如何成為嵌入式開發工程師?
哪些專業適合學習嵌入式開發?
嵌入式開發必備-RK3562演示Linux常用系統查詢命令(上)觸覺智能出品

如何使用 RISC-V 進行嵌入式開發
零基礎嵌入式開發學習路線
嵌入式開發常見問題排查

AWFlow:內置豐富的功能節點,簡化嵌入式開發流程

評論