探索IoT應(yīng)用中對于8位、32位MCU的選擇
延時
本文引用地址:http://butianyuan.cn/article/201605/291787.htm兩種架構(gòu)的中斷和函數(shù)調(diào)用延時存在很大差異,8051比ARM Cortex-M內(nèi)核更快。此外,高級外設(shè)總線(APB)配備的外設(shè)也會影響延時,這是因為數(shù)據(jù)必須通過APB和AMBA高性能總線(AHB)傳輸。最后,當(dāng)使用高頻內(nèi)核時鐘時,許多基于Cortex-M的MCU需要分配APB時鐘,這也增加了外設(shè)延時。
我做了個簡單的實驗,實驗中的中斷是通過I/O引腳觸發(fā)的。該中斷對引腳發(fā)出一些信號,并根據(jù)引發(fā)中斷的引腳更新標(biāo)志。然后我測量了一些參數(shù),如下表所示。這里的列表顯示了32位的實現(xiàn)。
8051內(nèi)核在中斷服務(wù)程序(ISR)進(jìn)入和退出時顯示出優(yōu)勢。但是,隨著中斷服務(wù)程序(ISR)越來越大和執(zhí)行時間的增加,這些延遲將變得微不足道。和已有原則一致,系統(tǒng)越大,8051的優(yōu)勢越小。此外,如果中斷服務(wù)程序(ISR)涉及到大量數(shù)據(jù)遷移或大于8位的整數(shù)數(shù)據(jù)運(yùn)算,中斷服務(wù)程序(ISR)執(zhí)行時間的優(yōu)勢將轉(zhuǎn)向ARM內(nèi)核。例如,一個采用新樣本更新16位或32位移動平均的ADC ISR可能在ARM設(shè)備上執(zhí)行的更快。
控制vs.處理
8051內(nèi)核的基本功能是控制代碼,其中對于變量的訪問是分散的,并且使用了許多控制邏輯(if、case等)。8051內(nèi)核在處理8位數(shù)據(jù)時也是非常有效的,而ARM Cortex-M內(nèi)核擅長數(shù)據(jù)處理和32位運(yùn)算。此外,32位數(shù)據(jù)通道使得ARM MCU復(fù)制大包的數(shù)據(jù)更加有效,因為它每次可以移動4個字節(jié),而8051每次僅能夠移動1個字節(jié)。因此,那些主要把數(shù)據(jù)從一個地方移動到另一個地方(例如UART到CRC或者到USB)的流數(shù)據(jù)處理的應(yīng)用更適合選擇基于ARM處理器的系統(tǒng)。
來做個簡單的實驗。我們編譯以下兩種架構(gòu)的函數(shù),變量大小為uint8_t、uint16_t和uint32_t。
uint32_t funcB(uint32_t testA, uint32_t testB){
return (testA * testB)/(testA—testB)
}
|data type | 32bit(-o3) | 8bit |
| uint8_t | 20 | 13 | bytes
| uint16_t | 20 | 20 | bytes
| uint32_t | 16 | 52 | bytes
隨著數(shù)據(jù)量的增加,8051內(nèi)核需要越來越多的代碼來完成這項工作,最終超過了ARM函數(shù)的大小。16位的情況下在代碼大小上幾乎類似,在執(zhí)行速度上稍好于32位內(nèi)核,因為相同代碼通常需要更少周期。還有一點很重要,那就是要注意到,只有采用優(yōu)化的ARM編譯代碼時,這種比較才有效。未優(yōu)化的代碼需要花費(fèi)幾倍長的時間。
這并不意味著有大量數(shù)據(jù)移動或32位運(yùn)算的應(yīng)用不應(yīng)該選擇8051內(nèi)核完成。在許多情況下,其它方面的考慮將超過ARM內(nèi)核的效率優(yōu)勢,或者說這種優(yōu)勢是不相關(guān)的??紤]使用UART到SPI橋接器。該應(yīng)用花費(fèi)大部分時間在外設(shè)之間復(fù)制數(shù)據(jù),而ARM內(nèi)核會更高效地完成該任務(wù)。然而,這也是一個非常小的應(yīng)用,可能小到足以放入一個僅有2KB存儲容量的器件就足夠合適。
盡管8051內(nèi)核效率較低,但它仍然有足夠的處理能力去處理該應(yīng)用中的高數(shù)據(jù)速率。對于ARM設(shè)備來說,可用的額外周期可能處于空閑循環(huán)或“WFI”(等待中斷),等待下一個可用的數(shù)據(jù)片到來。在這種情況下,8051內(nèi)核仍然最有意義,因為額外的CPU周期是微不足道的,而較小的flash封裝會節(jié)約成本。如果我們要利用額外的周期去做些有意義的工作,那么額外的效率將是至關(guān)重要的,且效率越高越可能越有利于ARM內(nèi)核。這個例子說明,清楚被開發(fā)系統(tǒng)所關(guān)注的環(huán)境中的各種架構(gòu)優(yōu)勢是何等重要。作出這個最佳的決定是簡單但卻重要的一步。
指針
8051設(shè)備沒有像ARM設(shè)備那樣的統(tǒng)一的存儲映射,而是對訪問代碼(Flash)、IDATA(內(nèi)部RAM)和XDATA(外部RAM)有不同的指令。為了生成高效的代碼,8051代碼的指針會說明它指向什么空間。然而,在某些情況下,我們使用通用指針,可以指向任何空間,但是這種類型的指針是低效的訪問。例如,將指針指向緩沖區(qū)并將該緩沖區(qū)數(shù)據(jù)輸出到UART的函數(shù)。如果指針是XDATA指針,那么XDATA數(shù)組能被發(fā)送到UART,但在代碼空間中的數(shù)組首先需要被復(fù)制到XDATA。通用指針能同時指向代碼和XDATA空間,但速度較慢,并且需要更多的代碼來訪問。
專用區(qū)域指針在大多情況下能發(fā)揮作用,但是通用指針在編寫使用情況未知的可重用代碼時非常靈活。如果這種情況在應(yīng)用中很常見,那么8051就失去了其效率優(yōu)勢。
通過選擇完成工作
我已經(jīng)注意到多次,運(yùn)算傾向于選擇ARM,而控制傾向于選擇8051,但沒有應(yīng)用僅僅著眼于計算或控制。我們怎樣才能表征廣義上的應(yīng)用,并計算出它的合適范圍呢?
讓我們考慮一個由10%的32位計算、25%的控制代碼和65%的一般代碼構(gòu)成的假定的應(yīng)用時,它不能明確的歸于8或32位類別。這個應(yīng)用也更注重代碼空間而不是執(zhí)行速度,因為它并不需要所有可用MIPS,并且必須為成本進(jìn)行優(yōu)化。成本比應(yīng)用速度更為重要的事實在一般代碼情形下將給8051內(nèi)核帶來微弱優(yōu)勢。此外,8051內(nèi)核在控制代碼中有中間等級的優(yōu)勢。ARM內(nèi)核在32位計算上占上風(fēng),但是這并非是很多應(yīng)用所考慮的??紤]到所有這些因素,這個特殊的應(yīng)用選擇8051內(nèi)核更加合適。
如果我們做一細(xì)微的改變,假設(shè)該應(yīng)用更關(guān)心執(zhí)行速度而非成本,那么通用代碼不會傾向于哪種架構(gòu),并且ARM內(nèi)核在計算代碼中全面占優(yōu)。在這種情況下,雖然有比計算更多的控制代碼,但是總的結(jié)果將相當(dāng)均衡。
顯然,在這個過程中有很多的評估,但是分解應(yīng)用然后評估每一組件的技術(shù)將幫助確保我們了解在哪種情況下哪種架構(gòu)有更顯著的優(yōu)勢。
功耗
當(dāng)查閱數(shù)據(jù)手冊時,很容易根據(jù)功耗數(shù)據(jù)得出哪個MCU更優(yōu)的結(jié)論。雖然睡眠模式和工作模式電流性能在某些類型MCU上確實更優(yōu),但是這一評估可能會非常具有誤導(dǎo)性。
占空比(在每個電源模式上分別占用多少時間)將始終占據(jù)能耗的主導(dǎo)地位。除非兩個器件的占空比相同,否則數(shù)據(jù)手冊中的電流規(guī)格幾乎是沒有意義的。最適合應(yīng)用需求的核心架構(gòu)通常具有更低的能耗。
假設(shè)有一個系統(tǒng),在設(shè)備被喚醒后添加一個16位ADC樣本到移動平均,然后返回到休眠狀態(tài),直到獲取下一個樣本時才又被喚醒。該任務(wù)涉及到大量16位和32位計算。ARM設(shè)備將能夠進(jìn)行計算,并比8051設(shè)備更快返回到休眠狀態(tài),這會讓系統(tǒng)功耗更低,即使8051具有更好的睡眠和工作模式電流。當(dāng)然,如果進(jìn)行的任務(wù)更適合8051設(shè)備,那么MCU能耗由于相同的原因而對系統(tǒng)有利。
外設(shè)特性也能夠以這樣或那樣的方式影響功耗。例如,大多數(shù)Silicon Labs的EFM32 32位MCU具有低功耗的UART(LEUART),能夠在低功耗模式下接收數(shù)據(jù),而卻只有兩個EFM8 MCU具有此功能。這一外設(shè)影響電源的占空比,且在任何需要等待UART通信的應(yīng)用中都比缺乏LEUART的EFM8在很大程度上有利于EFM32 MCU。遺憾的是,除了讓MCU供應(yīng)商的本地應(yīng)用工程師利用EFM8來解決問題,沒有簡單的指南來評估這些外設(shè)因素。系統(tǒng)設(shè)計人員還應(yīng)了解各種MCU能耗模式下可完成的處理任務(wù)。
8位或32位?我仍然不能決定!
如果考慮到所有這些變量后,仍然不清楚哪些MCU架構(gòu)是最好的選擇,會怎樣?那好吧!這說明,它們都是很好的選擇,你使用哪種體系結(jié)構(gòu)并不是緊要的事情。如果沒有明確的技術(shù)優(yōu)勢,那么過去的經(jīng)驗和個人喜好在你的MCU架構(gòu)決定中也起到了很大的作用。此外,你也可以利用這個機(jī)會去評估可能的未來項目。如果大多數(shù)未來項目更適合ARM設(shè)備,那么選擇ARM,如果未來項目更側(cè)重于降低成本和尺寸,那么就選擇8051。
這到底意味著什么呢?
8位MCU仍然可以為嵌入式開發(fā)人員提供許多功能,并且越來越關(guān)注物聯(lián)網(wǎng)。當(dāng)開發(fā)人員開始設(shè)計時,重要的是確保從工具箱中獲得合適的工具。雖然我還是很樂意把8051出售給可能更適合選擇32位設(shè)備的客戶,但是我不禁要想象如果開發(fā)人員僅僅花費(fèi)1個小時思考就作出決定,那么他們的工作將會如何更加容易、最終產(chǎn)品將會有多好。
實際上的難題是,不能僅僅依賴于PowerPoint演示文稿中的一兩個要點就得出選擇MCU架構(gòu)的結(jié)論。然而,一旦你有正確的信息,并愿意花一點時間應(yīng)用它,就不難作出最佳選擇。
關(guān)于作者
Josh Norem是Silicon Labs微控制器和無線產(chǎn)品系統(tǒng)工程師。他于2006年加入Silicon Labs公司,任職產(chǎn)品和測試工程師,擔(dān)任過包括測試和應(yīng)用方面的多個技術(shù)職位,最近擔(dān)任系統(tǒng)工程師。在加入Silicon Labs公司之前,Josh就職于AMD公司,負(fù)責(zé)AMD的x86微處理器的系統(tǒng)級速度調(diào)試工作。此前,他就職于TI,負(fù)責(zé)TI的DSP產(chǎn)品的開發(fā)和存儲測試。Josh擁有伊利諾斯大學(xué)(University of Illinois)Urbana-Champaign分校電氣工程科學(xué)學(xué)士學(xué)位。
評論