小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

單片機計算性能大比拼(51, AVR, MIPS, ARM)

 媛糖兒 2016-06-10

寫這篇文章純屬偶然,MCU benchmark有很多方法,且不同類型MCU benchmark方法完全不同,很難說誰好誰快? 不過,對電子愛好者來說,還是挺想知道“我所用的MCU”計算到底多快?本文,就從打醬油、非專業(yè)、大無畏精神出發(fā),探討入門級單片機計算性能到底如何、如何。


單片機能干的事兒很多啊,我通常用來:


1、控制個燈啊、空調(diào)啊、電視啊、小車啊神馬的。

2、用傳感器采集個溫度啊、濕度啊、電壓、電流、水流、人臉啊神馬的。

3、顯示輸出:液晶、OLED、數(shù)碼管;聲音;電風(fēng)扇神馬的。

4、超低功耗:家里的中央控制系統(tǒng)基于樹莓派,不到2W功耗。

5、便攜。貌似自己做成的東西極少具有便攜性。。。


在沒有接觸Arduino前都是用51倒騰,玩了有幾年,覺得51是最適合電子愛好者用的芯片,簡單、便宜、功能足夠!但接觸Arduino后才明白,原來還有這么個東東,比51先進得多,實在太好用了! 記得學(xué)51從二進制地址學(xué)起,不太好懂。后來用C開發(fā)經(jīng)常問:“明明 c=a+b; print(c); 就行了,我干嘛要去學(xué)指令、寄存器、尋址?”高級語言屏蔽底層很多東西,讓編程變得簡單。并不是基礎(chǔ)知識沒用,這好比高等數(shù)學(xué)這道門檻(俺數(shù)學(xué)專業(yè)),你必須弄懂基礎(chǔ)知識體系才能理解數(shù)學(xué)世界的美妙!但如果是經(jīng)濟學(xué)專業(yè),不懂?dāng)?shù)學(xué)基礎(chǔ)知識同樣可以玩兒轉(zhuǎn)經(jīng)濟學(xué)!你從中獲得的樂趣跟你投入成正比。所以,我用單片機并不是科班那種需要弄懂MCU每個功能、每個模塊,我用單片機就接接外設(shè),完成我的想法而已。也許,只用到了單片機十分之一。說實話,極少使用單片機計算能力(話說這也不是單片機的強項呀),但如你要做個智能小車、四軸飛行器、PID控制,那就需要一定的計算能力了。


開始,只是簡單想看看單片機運算有多快,偶然機會跟壇友交換了一塊chipKIT Uno32(MIPS芯片),就想橫向比較一下不同MCU的差別,于是就有了本文。其實,計算能力通過指令時鐘周期來計算,科學(xué)準(zhǔn)確,但對于不太精通底層知識的我,匯編猶如天書,真心看不懂??!所以,還是用我自己的土辦法測一下吧。


先說測試方法和原理:


1、只測試+、-、*、/、%五種操作符,uint8_t、uint16_t、uint32_t、uint64_t、float、double六種數(shù)據(jù)類型的性能。

2、首先測10000次空循環(huán)的時間,然后在循環(huán)中加入操作數(shù),記錄總的時間,減去空循環(huán)時間就是計算消耗的時間。

3、測試中由于有系統(tǒng)中斷(Arduino、STM32都有Tick中斷,51為計時也有中斷),結(jié)果不會很準(zhǔn),話說也沒指望它能有多準(zhǔn)。。。

4、編譯器優(yōu)化參數(shù) -O0,一開始測出來的運行時間都為“零”,徹底凌亂。研究之后方得知,編譯器優(yōu)化干掉空循環(huán),需通過參數(shù)關(guān)閉優(yōu)化。

5、不同芯片數(shù)據(jù)類型支持不一樣,有些數(shù)據(jù)類型會缺失。例如Arduino Uno中的float和double是一樣的,都是float;但32位架構(gòu)MCU中的double是float寬度的兩倍。


代碼類似這樣:


說個小故事。如不關(guān)閉測試優(yōu)化選型,把全局變量定義成局部變量,加法、減法的測試時間為“零”,沒錯,10000次計算不到4微秒,這顯然不可能。后來研究一番方得知編譯器默認(rèn)優(yōu)化參數(shù)是-Os,很多計算直接優(yōu)化了。。。。


測試用的板子:


1、傳統(tǒng)的AT89C516,還有宏晶鼓吹的1T 51單片機(STC12C5A60S2)

2、Arduino UNO(ATmega 328),Arduino Due(Atmel SAM3X8E,ARM架構(gòu)的)

3、chipKit Uno32(PIC32MX320F128 MIPS架構(gòu))

4、ST Nucleo F0(STM32F030R8),Nucleo F1(STM32F103RB),都是ARM架構(gòu)的


測試用開發(fā)環(huán)境:


1、51談不上什么優(yōu)化參數(shù),我用的uVision 2。晶振用22.1184M,據(jù)說這個片子可以跑到40M,我就呵呵一下好了。

2、Arduino IDE 1.6.9,圖中2/3都是用Arduino環(huán)境,其中編譯器參數(shù)需要修改platform.txt文件,默認(rèn)是-Os(優(yōu)化大?。?,改成-O0(完全不優(yōu)化),這個要重啟Arduino才能有效。。。

3、STM用的是MDK 5.16,HAL庫。沒辦法,對STM32真不熟,能搗鼓出結(jié)果很不錯了!mbed計時函數(shù)有問題,F(xiàn)0、F1芯片無法得出微秒級時間,只好用HAL,話說用CubeMX生成代碼還真挺方便的。



計時方法:


1、51用TIMER0計時,這個太簡單了,每計數(shù) 12/22.1184 微秒啊!

2、Arduino用系統(tǒng)micros(),根據(jù)兩次記錄的時間差,精度4微秒。

3、STM用HAL庫函數(shù)提供的HAL_GetTick(),通過HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/10000); 把計數(shù)器設(shè)為100微秒,再快會對計算有影響。


硬件說明:


1、部分芯片帶硬件乘、除法器,啊,那個性能好的沒話說。

2、32位MCU處理8/16/32位效果都是32位,但要求不高的地方,8位也夠。

3、結(jié)果通過串口返回,Arduino串口超簡單、STM32用HAL庫串口通信也還行,這51串口啊,我就不說了。


測試結(jié)果:


分析:


1、Base是空循環(huán)10000次的微秒數(shù),不同單片機差別還是挺大的,MIPS完勝,Arduino Due也不錯。

2、傳統(tǒng)51,計算8位加、減法大概3個時鐘周期;16位乘除法計算略慢;32位計算有點捉襟見肘了;浮點很奇怪,乘除比加減快,所以,可以用32位整數(shù)加減和浮點乘除來提高計算性能。

3、STC 1T單片機確實不錯,性能可跟8位的AVR叫板,考慮它的價格比AVR便宜,還是有使用價值滴。

4、Arduino Uno作為Arduino的入門直選,計算能力還不錯,32位加、減法都挺好,尤其浮點計算,還比51快一些;只是乘除法速度略慢。

5、Arduino Due采用32位ARM芯片,基本上是處理能力最強的Arduino板!32位整數(shù)計算不像Uno會往下掉,綜合性能比Uno高5~10倍,尤其乘、除法,硬件計算就是快??!

6、chipKIT把我震驚了,原來MIPS這么快,甩其它芯片幾條街?。。ㄟ@是不開優(yōu)化,開優(yōu)化也甩幾條街) MIPS整數(shù)能力超強,浮點計算略差,那也比Due快了近一倍!如果用Arduino開發(fā)需要高性能計算,chipKIT可以選。我用的是他們過時的產(chǎn)品,新產(chǎn)品系列性能更高,存儲更大!

7、STM32F0是Cortex-M0架構(gòu)的,不得不說其綜合能力不低啊。這么說是因為它的價格,比Due、chipKit的ARM、PIC芯片便宜多得多,但性能并不是沒得比。

8、STM32F1是

Cortex-M3架構(gòu),跟M0比多了硬件除法器,主頻更高?;旧?,STM32F1可以壟斷單片機的市場了,我對它唯一的希望就是:“把手冊做的簡單些,好難懂的說!”


綜上所述,對于單片機選用哪一款都是可以的,STM32F1系列雖然綜合最好,但學(xué)習(xí)門檻高,不易入門;51芯片雖歷史悠久,性能可圈可點,但在Arduino的沖擊下真沒什么價值了。業(yè)余愛好者追求的是簡單操作、快速搭建,Arduino完美的社區(qū)資源是任何其它芯片比不了滴!所以,建議非專業(yè)愛好者還是用Arduino來搭建原型,需要速度上MIPS芯片的chipKit,總有滿足你的!


以上分析的是無優(yōu)化性能,有點不公平。因為,實際上沒人會無優(yōu)化的編譯,那么打開優(yōu)化是什么樣子呢?請看下圖 (Arduino支持-O3,但考慮AVR片上Flash空間緊張,還是用-Os來說,附件有完整-O3的結(jié)果)


 

哇,性能全部飆升啊!平均都有3~5倍的提升,這也說明MCU的速度很依賴編譯器!


Arduino Due的性能比Uno快了近10倍,且Due的乘除性能不比STM32差,得益于ARM核心和硬件計算單元啊。

MIPS架構(gòu)總體最快,32位性能灰常優(yōu)異,僅浮點比STM32F103略慢。

STM32F103不愧是芯片之王,綜合性能最好,尤其浮點處理能力!用于PID、四軸飛行器的計算很合適。


最后,真正的樂趣不是看誰跑得快,而是設(shè)計一段程序,讓它能在完全不同的系統(tǒng)跑起來的那種成就感!這篇文章也是隨手而寫,測試內(nèi)容并不是非常嚴(yán)謹(jǐn),僅作參考。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多