<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 業(yè)界動態(tài) > 探索IoT應(yīng)用中對于8位、32位MCU的選擇

          探索IoT應(yīng)用中對于8位、32位MCU的選擇

          作者:Josh Norem 時間:2016-05-26 來源:電子產(chǎn)品世界 收藏

            在embedded world大會展示產(chǎn)品期間,我曾非常愉快的與一位思慮敏捷的人士進(jìn)行了交談。當(dāng)我向他介紹我們最新推出的EFM8 MCU時,他打斷我并問:“可我為什么還要使用8位MCU呢?”這不是我第一次聽到這樣的問題,當(dāng)然,也不會是最后一次。

          本文引用地址:http://www.ex-cimer.com/article/201605/291787.htm

            人們會很自然想到,正如汽車替代了馬拉車、電子郵件替代了普通郵件一樣,32位設(shè)備讓8位MCU變得黯然失色。盡管在還有些遙遠(yuǎn)的未來,8位MCU向32位MCU的過渡將會成為現(xiàn)實(shí),但在當(dāng)前還沒那么容易實(shí)現(xiàn)。事實(shí)證明8位MCU和32位MCU仍是互補(bǔ)的技術(shù),在某些方面各有千秋,而在其它方面卻表現(xiàn)的同樣出色。這其中的訣竅在于弄清什么樣的應(yīng)用適合什么樣的MCU架構(gòu)。

            本文對比了8位MCU和32位MCU的使用案例,也可作為如何選擇這兩種MCU架構(gòu)的指南使用。本文中大部分32位示例將關(guān)注ARM Cortex-M設(shè)備,Cortex-M在不同MCU供應(yīng)商產(chǎn)品組合中表現(xiàn)的非常相似。鑒于8位MCU有很多種架構(gòu),所以很難對8位供應(yīng)商之間進(jìn)行類似的產(chǎn)品比較。為了進(jìn)行比較,我們將使用廣泛應(yīng)用的、易于理解的8051 8位架構(gòu),該架構(gòu)深受嵌入式開發(fā)人員的青睞。

            優(yōu)化和圣戰(zhàn)

            有時,當(dāng)我對比人們所熟知的事物(例如ARM和8051)時,我感覺就像在互聯(lián)網(wǎng)論壇上發(fā)出“《星際迷航》比《星球大戰(zhàn)》好看”的帖子一樣,事情很快就能火起來。

            事實(shí)上“ARM Cortex和8051哪個更好”并不是個邏輯問題。就像是在問,“吉他和鋼琴哪個更好”一樣。真正要解決的問題是“哪種MCU能幫我最好的解決當(dāng)下面臨的問題?”。不同的任務(wù)需要使用不同的工具,我們的目的是要了解“如何才能最好的運(yùn)用我們所擁有的工具”,包括8位和32位設(shè)備。幾乎可以肯定的說,那些簡單回答“ARM更好”或“8051更好”的人各有其目的,正在試圖銷售某種商品。

            對不同的設(shè)備進(jìn)行比較,需要對其進(jìn)行測量。有很多構(gòu)建工具可供選擇,我盡力選擇一些場景,我認(rèn)為其能夠進(jìn)行最公平的比較,且最能代表開發(fā)人員的真實(shí)體驗(yàn)。以下ARM數(shù)據(jù)是通過GCC + nanoCLibrary和-03優(yōu)化選項所生成的。

            我并不想為任何一種設(shè)備優(yōu)化代碼。我只是簡單的實(shí)現(xiàn)90%開發(fā)人員都會使用的最顯而易見的“常規(guī)”代碼。我更感興趣的是普通開發(fā)人員所見到的結(jié)果,而不是理想狀態(tài)下的結(jié)果。當(dāng)然,花費(fèi)諸多時間、精力和財力去調(diào)整8051代碼使其表現(xiàn)比ARM更好是可能的(反之亦然),但一開始就選擇適合該項工作的最佳工具卻更為簡易。

            并非所有的MCU都是一樣的

            在開始對架構(gòu)進(jìn)行比較之前,要注意到并非所有生產(chǎn)的MCU都是一樣的,這一點(diǎn)非常重要。如果將基于ARM Cortex-M0+處理器的現(xiàn)代MCU與30年前的8051 MCU進(jìn)行對比,8051 MCU在性能對比上不會勝出。幸運(yùn)的是,許多供應(yīng)商一直在對8位處理器進(jìn)行持續(xù)投資。例如:Silicon Labs一直更新基于8051內(nèi)核的EFM8 MCU產(chǎn)品線,比原來的8051架構(gòu)更為高效,而且開發(fā)過程也已經(jīng)實(shí)現(xiàn)現(xiàn)代化。所以,在許多應(yīng)用中,8位內(nèi)核能夠容易彌補(bǔ)比M0+或M3內(nèi)核不利的地方,甚至在一些方面性能更佳。

            開發(fā)工具也很重要。現(xiàn)代嵌入式固件開發(fā)需要全功能IDE、現(xiàn)成的固件庫、豐富的示例、完整的評估和入門套件、以及助手應(yīng)用,以簡化硬件配置、庫管理和量產(chǎn)編程之類的工作。當(dāng)MCU有了現(xiàn)代化的8位內(nèi)核和開發(fā)環(huán)境時,在很多情況下,這樣的MCU將超越基于ARM-Cortex的類似MCU。

            一般性取舍

            在深入探討內(nèi)核架構(gòu)和其它技術(shù)細(xì)節(jié)之前,我要和大家講一個故事,在我讀大學(xué)的時候,記得有一次考試,我太在意考取好分?jǐn)?shù)和比其他同學(xué)先完成考題,以至于沒有注意到在試卷的正反面都印有試題。不用說,我的確是第一個完成考卷的人,但卻是我不愿再想起的一次經(jīng)歷。如果一個應(yīng)用需要的只是256KB的閃存或0.25美元的批量定價,那么分析復(fù)雜的MCU特性和功能是沒有意義的。這些需求足以說明何種MCU架構(gòu)才是最佳選擇。

            系統(tǒng)規(guī)模

            第一個一般性原則是,ARM Cortex-M內(nèi)核更適用于較大的系統(tǒng)規(guī)模(> 64KB代碼),而8051設(shè)備適用于較小的系統(tǒng)規(guī)模(< 8KB代碼)。中等規(guī)模的系統(tǒng)可以選擇兩種方式,這取決于系統(tǒng)要執(zhí)行的任務(wù)。有必要注意一點(diǎn),在大多數(shù)情況下,外設(shè)組合將會發(fā)揮重要作用。如果需要3個UART、1個LCD控制器、4個時鐘和2個ADC,你可能并不會在8位MCU上找到所有這些外設(shè)。

            易用性vs.成本和尺寸

            對于中等規(guī)模的系統(tǒng)來說,使用任何一種架構(gòu)都可以完成工作。但主要的權(quán)衡是選擇ARM內(nèi)核帶來的易用性,還是8051設(shè)備帶來的成本和物理尺寸優(yōu)勢。

            ARM Cortex-M架構(gòu)具有統(tǒng)一的存儲模式,并且在所有常見編譯器中支持完整的C99,這使得這種架構(gòu)非常易于寫固件。此外,還可得到一系列庫和第三方代碼。當(dāng)然,這種易用性的代價就是成本。對于高復(fù)雜性、上市時間較短的應(yīng)用或缺乏經(jīng)驗(yàn)的固件開發(fā)人員來說,易用性是個重要因素。

            盡管8位與32位部件相比有些成本上的優(yōu)勢,但真正的區(qū)別就在于成本級別。大家經(jīng)常會發(fā)現(xiàn)具有2KB/512B(Flash/RAM)的小容量8位器件,而卻很少見低于8KB/2KB的32位器件。在不需要很多資源的系統(tǒng)中,該范圍的存儲容量能夠讓系統(tǒng)開發(fā)人員獲得顯著降低成本的解決方案。因此,對成本極為敏感或僅需較小存儲容量的應(yīng)用會更傾向于選擇8051解決方案。

            通常,8位器件也具有物理尺寸上的優(yōu)勢。例如:Silicon Labs提供的最小的32位QFN封裝為4mm×4mm,而基于8051的8位器件的QFN封裝可小至2mm×2mm。芯片級封裝(CSP)的8位和32位架構(gòu)之間的差異較小,但卻使成本增加,且組裝較難。對于空間嚴(yán)格受限的應(yīng)用來說,通常需要選擇8051設(shè)備來滿足限制要求。

            通用代碼和RAM效率

            8051 MCU成本較低的主要原因之一是它通常比ARM Cortex-M內(nèi)核更高效的使用Flash和RAM,這允許系統(tǒng)采用更少資源實(shí)現(xiàn)。系統(tǒng)越大,這種影響就越小。

            注意這種8位存儲資源的優(yōu)勢并不總是如此,這一點(diǎn)很重要。在某些情況下,ARM內(nèi)核會像8051內(nèi)核一樣高效或比其更高效。例如:32位運(yùn)算僅需要一條ARM設(shè)備指令,而在8051 MCU上則需要多條8位指令。顯然,這種代碼在ARM架構(gòu)上有更高的執(zhí)行效率。

            ARM架構(gòu)在Flash/RAM尺寸較小時的兩個主要缺點(diǎn)是:代碼空間效率和RAM使用的可預(yù)測性。

            首要也是最明顯的問題是通用代碼空間效率。8051內(nèi)核使用1字節(jié)、2字節(jié)或3字節(jié)指令,而ARM內(nèi)核使用2字節(jié)或4字節(jié)指令。通常情況下,8051指令更小,但這一優(yōu)勢因?qū)嶋H上花費(fèi)許多時間而受到削弱,ARM內(nèi)核比8051在一條指令下能做更多工作。32位運(yùn)算就是這樣一個示例。實(shí)踐起來,指令寬度是能在8051上產(chǎn)生適度的更密集代碼。

            代碼空間效率

            在含有分布式訪問變量的系統(tǒng)中,ARM架構(gòu)的加載/存儲架構(gòu)通常比指令寬度更為重要。試想信號量的實(shí)現(xiàn),一個變量需要在代碼周圍的多個不同位置進(jìn)行減量(分配)或者增量(釋放)。ARM內(nèi)核必須將變量加載到寄存器,對其進(jìn)行操作并重新存儲,這需要3條指令。另一方面,8051內(nèi)核可以直接在內(nèi)存位置上進(jìn)行操作,且僅需1條指令。隨著每次對變量完成工作量的增大,由于加載/存儲而產(chǎn)生的消耗就變得微不足道。但對于每次僅完成一點(diǎn)工作的情況來說,加載/存儲能產(chǎn)生重要影響,讓8051獲得明顯的效率優(yōu)勢。

            盡管信號量在嵌入式軟件中并非常見結(jié)構(gòu),但簡單的計數(shù)器和標(biāo)志卻廣泛應(yīng)用于控制導(dǎo)向的應(yīng)用中并起著相同的作用。許多常見的MCU代碼都屬于這一類型。

            另一個原因是ARM處理器比8051內(nèi)核更多的自由使用棧這一事實(shí)。通常情況下,8051設(shè)備針對每次函數(shù)調(diào)用僅在棧上存儲返回地址(2字節(jié)),通過通常分配給棧的靜態(tài)變量處理大量的任務(wù)。在某些情況下,這會產(chǎn)生問題,因?yàn)檫@會造成函數(shù)默認(rèn)不可重入。然而,這也意味著必需保留的??臻g很小,且完全可預(yù)測,這在RAM容量有限的MCU中至關(guān)重要。

            舉個簡單的例子,我創(chuàng)建了以下程序。然后測量funcB內(nèi)部的棧深度,發(fā)現(xiàn)M0+內(nèi)核的棧用了48個字節(jié),而8051內(nèi)核的棧僅用了16個字節(jié)。當(dāng)然,8051內(nèi)核還靜態(tài)分配了8個字節(jié)的RAM,總共用了24個字節(jié)。在較大的系統(tǒng)中,這個差異顯得微不足道,但是在僅有256字節(jié)ARM的系統(tǒng)中,這就變得很重要。

            架構(gòu)細(xì)節(jié)

            現(xiàn)在,我們來說說基本情景。假設(shè)有基于ARM和基于8051的MCU各一個,配有所需的外設(shè),那么對于較大的系統(tǒng)或需要重點(diǎn)考慮易用性的應(yīng)用來說,ARM設(shè)備是更好的選擇。如果首要考慮的是低成本/小尺寸,那么8051設(shè)備將是更好的選擇。下面我們對于每種架構(gòu)更擅長的應(yīng)用進(jìn)行更詳細(xì)的分析,同時也劃分出一般原則。


          上一頁 1 2 下一頁

          關(guān)鍵詞: Silicon Labs IoT

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();