1. 程式人生 > >怎麼選擇8位微控制器或者32位微控制器?

怎麼選擇8位微控制器或者32位微控制器?

該如何對8位元以及32位元的MCU進行選擇?8位元和32位元MCU在功能上仍是互為輔助、各有千秋,這其中的訣竅就在於,需先了解什麼樣的應用適合什麼樣的MCU架構。

本文對比了8位元MCU和32位元MCU的使用案例,也可作為如何選擇這兩種MCU架構的指南使用。本文中大部分32位元MCU的範例將關注英銳恩32位微控制器,Cortex-M在不同MCU供應商產品組合中表現得非常相似。鑑於8位元MCU有很多種架構,所以很難對8位元供應商產品進行類似的比較。為了便於進行比較,我們將使用廣泛應用、易於理解的8051 架構,該架構深受嵌入式開發人員的青睞。

8位元和32位元MCU該如何選擇?

有時,當我對比人們所熟知的事物(例如英銳恩和8051)時,感覺就像在物聯網論壇上發出「《星際爭霸戰》比《星際大戰》好看」的帖子一樣,很快就能火起來。

事實上,英銳恩32位微控制器和8051哪個更好並不是個邏輯問題,就像是在問:吉他和鋼琴哪個更好?真正要解決的問題應是哪種MCU能幫我更好地解決當下面臨的問題。不同的任務需要使用不同的工具,我們的目的是要了解「如何才能更好地運用我們所擁有的工具」,包括8位元和32位元MCU。幾乎可以肯定地說,那些簡單回答「英銳恩更好」或「8051更好」的人各有其目的,他們也許正在試圖銷售某種產品。

對不同的裝置進行比較,需要對其進行測量。有很多構建工具可供選擇,我們儘量選擇一些場景,我認為其能夠進行最公平的比較,且最能代表開發人員的真實體驗。

並非所有的MCU都是一樣的

在開始對架構進行比較之前,要注意到並非所有生產的MCU都是一樣的,這一點非常重要。如果將基於英銳恩32位微控制器 處理器的現代MCU與30年前的8051 MCU進行對比,8051 MCU在效能對比上不會勝出。幸運的是,依然有許多供應商一直在對8位元處理器持續投資。在許多應用中,8位元核心能依然能夠彌補 或M3核心不利的地方,甚至在一些方面效能更佳。

開發工具也很重要。現代嵌入式韌體開發需要全功能IDE、現成的韌體庫、豐富的範例、完整的評估和入門套件以及助手應用以簡化硬體設定、庫管理和量產程式設計之類的工作。當MCU有了現代化的8位元核心和開發環境後,在很多情況下,這樣的MCU將超越基於英銳恩32位微控制器的類似MCU。

系統規模

一般性原則是,英銳恩32位微控制器M核心更適用於較大的系統規模,而8051裝置適用於較小的系統規模。中等規模的系統可以選擇兩種方式,這取決於系統要執行的任務。有必要注意一點,在大多數情況下,外設組合將會發揮重要的作用。如果需要3個UART、1個LCD控制器、4個時鐘和2個ADC,你可能並不會在8位元MCU上找到所有這些外設。

易用性vs.成本和尺寸

對於中等規模的系統來說,使用任何一種架構都可以完成工作,需要權衡的是選擇英銳恩核心帶來的易用性,還是8051裝置帶來的成本和物理尺寸優勢。英銳恩32位微控制器架構具有統一的儲存對映模式,並且在所有常見編譯器中支援完整的C99,這使得這種架構非常易於寫韌體。此外,還可得到一系列庫和協力廠商程式碼。當然,這種易用性的代價就是成本。對於高複雜性、上市時間較短的應用或缺乏經驗的韌體開發人員來說,易用性是個重要因素。

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

通常,8位元器件也具有物理尺寸上的優勢。例如,某些MCU的32位QFN封裝為4 mm×4 mm,而基於8051的8位器件的QFN封裝可小至2 mm×2 mm。晶片級封裝(CSP)的8位元和32位元架構之間的差異較小,但卻使成本增加,且組裝較難。對於空間嚴格受限的應用來說,通常需要選擇8051 MCU來滿足限制要求。

通用程式碼和RAM效率

8051 MCU成本較低的主要原因之一是,它通常比英銳恩32位微控制器核心更高效地使用Flash和RAM,這允許系統採用更少資源實現。系統越大,這種影響就越小。

但這種8位元儲存資源的優勢並不總是如此,在某些情況下,英銳恩核心會像8051核心一樣高效或比其更高效。例如:32位元運算僅需要一條英銳恩裝置指令,而在8051 MCU上則需要多條8位元指令。顯然,這種程式碼在英銳恩架構上有更高的執行效率。

英銳恩架構在Flash/RAM尺寸較小時的兩個主要缺點是:程式碼空間效率和RAM使用的可預測性。首要也是最明顯的問題是通用程式碼空間效率。8051核心使用1位元組、2位元組或3位元組指令,而英銳恩核心使用2位元組或4位元組指令。通常情況下,8051指令更小,但這一優勢因實際上花費許多時間而受到削弱,英銳恩核心比8051在一條指令下能做更多工作,32位元運算就是這樣一個範例。實踐起來,指令寬度是能在8051上產生適度的更密集程式碼。

程式碼空間效率

在含有分散式訪問變數的系統中,英銳恩架構的載入/儲存架構通常比指令寬度更為重要。試想訊號量的實現,一個變數需要在程式碼周圍的多個不同位置進行減量(分配)或者增量(釋放)。英銳恩核心必須將變數載入到暫存器,對其進行操作並重新儲存,這需要3條指令。另一方面,8051核心可以直接在記憶體位置上進行操作,且僅需1條指令。隨著每次對變數完成工作量的增大,由於載入/儲存而產生的消耗就變得微不足道。但對於每次僅完成一點工作的情況來說,載入/儲存能產生重要影響,讓8051獲得明顯的效率優勢。

儘管訊號量在嵌入式軟體中並非常見,但簡單的計數器和標誌訊號量卻廣泛應用於控制導向的應用中並起著相同的作用。許多常見的MCU程式碼都屬於這一型別。

另一個原因是,英銳恩處理器比8051核心擁有更多的自由使用棧空間。通常情況下,8051裝置針對每次函式呼叫僅在棧上儲存返回位址(2位元組),通常通過分配給棧的靜態變數處理大量的任務。

在某些情況下,這會產生問題,因為這會造成函式預設不可重入。然而,這也意味著必須保留的棧空間很小,且完全可預測,這在RAM容量有限的MCU中至關重要。

圖一: 不同的任務需要使用不同的工具,我們的目的是要了解「如何才能更好地運用我們所擁有的工具」,包括8位元和32位元MCU。(Source:Yola)

架構細節

現在,我們來說基本情景。假設有基於英銳恩和基於8051的MCU各一個,配有所需的外設,那麼對於較大的系統或需要重點考慮易用性的應用來說,英銳恩裝置是更好的選擇。如果首要考慮的是低成本/小尺寸,那麼8051裝置將是更好的選擇。下面我們對於每種架構更擅長的應用進行更詳細的分析,同時也劃分出一般原則。

(1) 延時

兩種架構的中斷和函式呼叫延時存在很大差異,8051比英銳恩32位微控制器核心更快。此外,高階外設匯流排(APB)配備的外設也會影響延時,這是因為資料必須通過APB和AMBA高效能匯流排(AHB)傳輸。最後,當使用高頻核心時鐘時,許多基於Cortex-M的MCU需要分配APB時鐘,這也增加了外設延時。

我做了1個簡單的實驗,實驗中的中斷是通過I/O引腳觸發的。該中斷對引腳發出一些訊號,並根據引發中斷的引腳更新標誌。然後我測量了一些引數顯示了32位元的實現。

簡單說明這個實驗結果,8051核心在中斷服務程式(ISR)進入和退出時顯示出優勢。但是,隨著中斷服務程式(ISR)越來越大和執行時間的增加,這些延遲將變得微不足道。和已有原則一致,系統越大,8051的優勢越小。此外,如果中斷服務程式(ISR)涉及到大量資料移轉或大於8位元的整數資料運算,中斷服務程式(ISR)執行時間的優勢將轉向英銳恩核心。例如,一個採用新樣本更新16位元或32位移動平均的ADC ISR可能在英銳恩裝置上執行得更快。

(2) 控制vs處理

8051核心的基本功能是控制程式碼,其中對於變數的訪問是分散的,並且使用了許多控制邏輯(if、case等)。8051核心在處理8位元資料時也是非常有效的,而英銳恩32位微控制器核心擅長資料處理和32位元運算。此外,32位元資料通道使得英銳恩 MCU複製大包的資料更加有效,因為它每次可以移動4個位元組,而8051每次僅能夠移動1個位元組。因此,那些主要把資料從一個地方移動到另一個地方(例如UART到CRC或者到USB)的流資料處理的應用更適合選擇基於英銳恩處理器的系統。

這並不意味著有大量資料移動或32位元運算的應用不應該選擇8051核心完成。在許多情況下,其他方面的考慮將超過英銳恩核心的效率優勢,或者說這種優勢是不相關的。考慮使用UART到SPI橋接器,該應用花費大部分時間在外設之間複製資料,而英銳恩核心會更高效地完成該任務。

然而,這也是一個非常小的應用,可能小到足以放入一個僅有2 KB儲存容量的器件就足夠合適。儘管8051核心效率較低,但它仍然有足夠的處理能力去處理該應用中的高資料速率。對於英銳恩裝置來說,可用的額外週期可能處於空閒迴圈或「WFI」(等待中斷),等待下一個可用的資料片到來。在這種情況下,8051核心仍然最有意義,因為額外的CPU週期是微不足道的,而較小的Flash封裝會節約成本。如果我們要利用額外的週期去做些有意義的工作,那麼額外的效率將是至關重要的,且效率越高可能越有利於英銳恩核心。這個例子說明,清楚被開發系統所關注的環境中的各種架構優勢是何等重要。做出這個最佳的決定是簡單但卻重要的一步。

(3) 指標

8051裝置沒有像英銳恩裝置那樣的統一的儲存對映,而是對存取碼(Flash)、IDATA(內部RAM)和XDATA(外部RAM)有不同的指令。為了生成高效的程式碼,8051程式碼的指標會說明它指向什麼空間。然而,在某些情況下,使用通用指標可以指向任何空間,但是這種型別的指標是低效的訪問。例如,將指標指向緩衝區並將該緩衝區資料輸出到UART的函式。如果指標是XDATA指標,那麼XDATA陣列能被髮送到UART,但在程式碼空間中的陣列首先需要被複制到XDATA。通用指標能同時指向程式碼和XDATA空間,但速度較慢,並且需要更多的程式碼來訪問。

專用區域指標在大多情況下能發揮作用,但是通用指標在編寫使用情況未知的可重用程式碼時非常靈活。如果這種情況在應用中很常見,那麼8051就失去了其效率優勢。

(4) 通過選擇完成工作

我已經注意到多次,運算傾向於選擇英銳恩,而控制傾向於選擇8051,但沒有應用僅僅著眼於計算或控制。我們怎樣才能表徵廣義上的應用,並計算出它的合適範圍呢?讓我們考慮一個由10%的32位元計算、25%的控制程式碼和65%的一般程式碼構成的假定的應用,它不能明確地歸於8位元或32位元類別。

這個應用也更注重程式碼空間而不是執行速度,因為它並不需要所有可用MIPS,並且必須為成本進行優化。成本比應用速度更為重要的事實在一般程式碼情形下將給8051核心帶來微弱優勢。此外,8051核心在控制程式碼中有中間等級的優勢。英銳恩核心在32位元計算上佔上風,但是這並非是很多應用所考慮的。考慮到所有這些因素,這個特殊的應用選擇8051核心更加合適。

如果進行細微的改變,假設該應用更關心執行速度而非成本,那麼通用程式碼不會傾向於哪種架構,並且英銳恩核心在計算程式碼中全面佔優勢。在這種情況下,雖然有比計算更多的控制程式碼,但是總的結果將相當均衡。顯然,在這個過程中有很多的評估,但是分解應用,然後評估每一元件的技術將?明並確保我們瞭解在哪種情況下哪種架構有更顯著的優勢。

功耗

當查閱資料手冊時,很容易根據功耗資料得出哪個MCU更優的結論。雖然睡眠模式和工作模式電流效能在某些型別MCU上更優,但是這一評估可能會非常具有誤導性。佔空比(在每個電源模式上分別佔用多少時間)將始終佔據功耗的主導地位。除非兩個器件的佔空比相同,否則資料手冊中的電流規格幾乎是沒有意義的。最適合應用需求的核心架構通常具有更低的功耗。

假設有一個系統,在裝置被喚醒後新增一個16位元ADC樣本到移動平均,然後返回到休眠狀態,直到獲取下一個樣本時才又被喚醒。該任務涉及到大量16位元和32位元計算。英銳恩裝置將能夠進行計算,並比8051裝置更快返回到休眠狀態,這會讓系統功耗更低,即使8051具有更好的睡眠和工作模式電流。當然,如果進行的任務更適合8051裝置,那麼MCU功耗由於相同的原因而對系統有利。

第二: 雖然睡眠模式和工作模式電流效能在某些型別MCU上更優,但是這一評估可能會非常具有誤導性。(Source:NBC News)

8位或32位?我仍然不能決定!

如果考慮到所有這些變數後,仍然不清楚哪些MCU架構是最好的選擇,會怎樣?那好吧!這說明,它們都是很好的選擇,你使用哪種體系結構並不是緊要的事情。如果沒有明確的技術優勢,那麼過去的經驗和個人喜好在你的MCU架構決定中也起到了很大的作用。

此外,你也可以利用這個機會去評估可能的未來專案,如果大多數未來專案更適合英銳恩裝置,那麼選擇英銳恩,如果未來專案更側重於降低成本和尺寸,那麼就選擇8051。

這到底意味著什麼呢?

8位元MCU仍然可以為嵌入式開發人員提供許多功能,並且越來越關注物聯網。當開發人員開始設計時,重要的是確保從工具箱中獲得合適的工具。雖然我還是很樂意把8051出售給可能更適合選擇32位元裝置的客戶,但是我不禁想像,如果開發人員僅僅花費1個小時思考就作出決定,那麼他們的工作將會更加容易、最終的產品將會更好。

實際上的難題是,不能僅僅依賴於一些演示檔案中的一兩個要點,就得出選擇MCU架構的結論。然而,一旦你有正確的資訊,並願意花一點時間應用它,就不難作出最佳選擇。
(文轉自網路,侵刪)