<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          嵌入式開(kāi)發(fā)為什么不選擇匯編、Java而是C語(yǔ)言呢?

          共 1656字,需瀏覽 4分鐘

           ·

          2020-06-06 23:22


          關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

          ID:技術(shù)讓夢(mèng)想更偉大

          作者:李肖遙


          對(duì)于現(xiàn)在我們從事嵌入式開(kāi)發(fā)的人員來(lái)說(shuō),C語(yǔ)言好像是必備的技能,也是最常見(jiàn)的開(kāi)發(fā)語(yǔ)言.

          但是我們有沒(méi)有想過(guò)為什么嵌入式開(kāi)發(fā)要使用C語(yǔ)言呢?為什么不使用匯編呢?為什么不使用Java呢?我想從嵌入式開(kāi)發(fā)->反向驗(yàn)證->正面驗(yàn)證來(lái)聊起.

          什么是嵌入式開(kāi)發(fā)?

          百度百科說(shuō)法如下:

          嵌入式開(kāi)發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),包括在系統(tǒng)化設(shè)計(jì)指導(dǎo)下的硬件和軟件以及綜合研發(fā)。除暫且分離硬件的EDA研發(fā)以外,側(cè)重的就是在一定硬件條件下的系統(tǒng)化設(shè)計(jì)和軟件研發(fā)。

          在我們平時(shí)的接觸中,嵌入式開(kāi)發(fā)一般常用的系統(tǒng)有WinCE,linux,android和一些實(shí)時(shí)操作系統(tǒng)等等

          使用的語(yǔ)言有c,c++或匯編;用高級(jí)處理器,arm7,arm9,arm11,或者一些8bit,16bit,32bit單片機(jī)等

          主流的嵌入式平臺(tái)有三種:ARM平臺(tái)、DSP平臺(tái)和FPGA平臺(tái)。

          嵌入式為什么不用匯編?

          嚴(yán)格來(lái)說(shuō),不是不用,而是不建議用

          匯編和C語(yǔ)言都可以直接訪問(wèn)硬件,可以直接編譯生成硬件識(shí)別的機(jī)器碼文件,并且匯編的語(yǔ)法較為簡(jiǎn)單,生成的可執(zhí)行文件更小

          隨著硬件的發(fā)展,內(nèi)存也越來(lái)越大,匯編這些優(yōu)勢(shì)也不再是優(yōu)勢(shì)了,并且匯編難,普通的51用匯編還行,指令不多.

          新型的單片機(jī),寄存器成百上千,全靠記憶簡(jiǎn)直天方夜譚,復(fù)雜的大型項(xiàng)目不是一個(gè)人能完成的,匯編的移植性和修改性以及可讀性太差.

          當(dāng)然能熟練掌握匯編,會(huì)對(duì)單片機(jī)的內(nèi)部結(jié)構(gòu)、讀寫(xiě)時(shí)序等有一個(gè)清楚的了解,然后接著學(xué)c語(yǔ)言,對(duì)整個(gè)系統(tǒng)的了解是有幫助的.

          嵌入式為什么不用 java 語(yǔ)言寫(xiě)?

          在很多很多年前,java是為嵌入式打造的語(yǔ)言,Java語(yǔ)言設(shè)計(jì)的初衷就是針對(duì)嵌入式的,原來(lái)的U-SIM卡,現(xiàn)在新出來(lái)的SWP-SIM(NFC)卡里面的程序都是跑的java 代碼。

          隨著發(fā)展,Java開(kāi)始在通用平臺(tái)上普及開(kāi)來(lái),并且JAVA是面向?qū)ο缶幊?是編譯器在后面增加大量的東西的才變成機(jī)器語(yǔ)言,換而言之,這樣程序無(wú)法直接操作內(nèi)存

          比如你定義一個(gè)類(lèi),最終在內(nèi)存中實(shí)現(xiàn)時(shí),編譯器已經(jīng)加了大量附加?xùn)|西。如父類(lèi)數(shù)據(jù)結(jié)構(gòu),VT表指針之類(lèi)等等。而底層程序主要是操作寄存器和內(nèi)存地址,必須要精確而直接操作它,所以難以達(dá)到

          當(dāng)然,Java需要經(jīng)過(guò)一層虛擬機(jī),效率上不是很好。很多嵌入式項(xiàng)目資源有限,是養(yǎng)不起java虛擬機(jī)的。

          嵌入式系統(tǒng)和C語(yǔ)言的聯(lián)系

          操作系統(tǒng)包括內(nèi)核、驅(qū)動(dòng)等都是使用C語(yǔ)言和匯編編寫(xiě)的,只有小部分會(huì)使用匯編語(yǔ)言,其余絕大部分是C語(yǔ)言。

          比如boot的時(shí)候會(huì)有一些切換處理器模式之類(lèi)的指令,用匯編干這種活簡(jiǎn)單粗暴,代碼量少,寫(xiě)好了就不需要維護(hù)了.

          C在操作系統(tǒng)中流行在1970年代Unix出現(xiàn)時(shí)就開(kāi)始了,現(xiàn)在常用的操作系統(tǒng)內(nèi)核基本上都是由c語(yǔ)言編寫(xiě)的,所以這是歷史的聯(lián)系,更是成千上萬(wàn)程序員的聯(lián)系.

          為什么選擇C,要從C語(yǔ)言的特點(diǎn)說(shuō)起

          C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼,并且不需要任何運(yùn)行環(huán)境支持,便能運(yùn)行的編程語(yǔ)言,其移植性好,能夠在多種不同體系結(jié)構(gòu)的軟件或硬件平臺(tái)上運(yùn)行;

          相對(duì)來(lái)說(shuō),C語(yǔ)言在高級(jí)語(yǔ)言當(dāng)中是最貼近物理層面的語(yǔ)言,經(jīng)過(guò)一系列的編譯轉(zhuǎn)換,最終它會(huì)成為0101的機(jī)械碼,可以操作硬件,并且具有簡(jiǎn)介緊湊、使用靈活的語(yǔ)法機(jī)制.

          C語(yǔ)言具有很高的運(yùn)行效率。通過(guò)觀察C語(yǔ)言的背景可以看得出:匯編語(yǔ)言 - B語(yǔ)言 - C語(yǔ)言。在芯片上執(zhí)行的程序:寫(xiě)匯編執(zhí)行效率最高,C語(yǔ)言其次,大概在80%左右

          最后注意的點(diǎn)

          C語(yǔ)言的缺點(diǎn)主要表現(xiàn)在數(shù)據(jù)的封裝性上,并且語(yǔ)法限制不太嚴(yán)格,變量的類(lèi)型約束不嚴(yán)格,對(duì)數(shù)組下標(biāo)越界不作檢查等,影響程序的安全性。

          我們?cè)谇度胧骄幊讨?要取長(zhǎng)補(bǔ)短,用最優(yōu)的方法,最少的時(shí)間,做最對(duì)的事情

          推薦閱讀:期待要來(lái)的qt6.0嗎?年底將重磅來(lái)襲
          【編程之美】模塊化編程到底有多重要

          關(guān)注微信公眾號(hào)『技術(shù)讓夢(mèng)想更偉大』,后臺(tái)回復(fù)“m”查看更多內(nèi)容,回復(fù)“加群”加入技術(shù)交流群。

          長(zhǎng)按前往圖中包含的公眾號(hào)關(guān)注

          瀏覽 72
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产白嫩精品久久久久久 | 欧美色乱论视频 | 久久久久亚洲Av片无码下载蜜桃 | 中文字幕撸一撸 | 国产伊人网站 |