大家好,感謝社區(qū)提供的板卡。這次的使用對(duì)象是安富萊的STM32-V6板卡。由于之前用過(guò)安富萊的V4板卡,所以安富萊給我留下了很深的印象,他們開發(fā)板的資料很過(guò)硬,售后完善,線上QQ技術(shù)支持也很給力,作為學(xué)習(xí),確實(shí)是一款很不錯(cuò)的板卡。唯一的是,安富萊很少出視頻,其主要是編寫PDF教學(xué)手冊(cè)和程序例程。
另外他們的按鍵檢測(cè)代碼,很緊湊,有單發(fā)、連發(fā)、長(zhǎng)按、短按、上升沿觸發(fā)、下降沿觸發(fā)等功能,是我見到最棒的按鍵檢測(cè)代碼。
STM32-V6是一款基于STM32F429單片機(jī)的開發(fā)板,整板采用4層板設(shè)計(jì),本次選擇它的目的,除了測(cè)試其能做常用外設(shè)開發(fā)驅(qū)動(dòng),安富萊還對(duì)它做了一個(gè)示波器的例程。雖然示波器的性能不強(qiáng),但是去十分有意思。另外其支持VNC虛擬屏幕功能。開發(fā)者可以不用LCD顯示屏幕,直接使用PC屏幕作為自己的開發(fā)板屏幕,十分方便。所以這個(gè)板子真的很強(qiáng)大。
拿到板子,在我查看他們的網(wǎng)絡(luò)示波器例程后,發(fā)現(xiàn)安富萊只做了基于RTX的例程,并沒(méi)有做基于uCOS、FreeRTOS的例程,這樣我感到很奇怪。因?yàn)榘哺蝗R的每個(gè)例程都會(huì)做三個(gè)OS版本,唯獨(dú)這個(gè)例程卻只制作了一個(gè)基于RTX的。他們的技術(shù)支持回復(fù)是:“FreeRTOS的性能不行,所以對(duì)這個(gè)網(wǎng)絡(luò)示波器的的應(yīng)用來(lái)說(shuō),沒(méi)有制作這方面的例程”,這讓我感到很疑惑,F(xiàn)reeRTOS作為一款開源RTOS,性能真有這么差么?到底他們之間的差距又有多大?
所以才有這次做UCOS-II、UCOS-III、FreeRTOS、RTX系統(tǒng)性能對(duì)比測(cè)試,本次我只是站在一個(gè)使用者的角度,測(cè)試四個(gè)RTOS單一的系統(tǒng)調(diào)度性能。盡量使4個(gè)RTOS處在同一水平上測(cè)試:
l? 使用相同的硬件平臺(tái)和相同的資源
l? 單片機(jī)都使用相同的主頻,只是單片機(jī)的Uart資源
l? 4個(gè)RTOS并非都裁剪到極致,保留信號(hào)量、隊(duì)列、消息等功能。
l? 都使用相同的時(shí)間片1mS、任務(wù)數(shù)量、任務(wù)堆棧設(shè)置一樣大小。
l? 使用相同的編譯工具M(jìn)DK4.7,采用相同的優(yōu)化等級(jí)。
l? 測(cè)試任務(wù)代碼邏輯以及優(yōu)先級(jí)關(guān)系保持一致。
本次測(cè)試的系統(tǒng)版本為:
RTX? ? ? ? ? ? ? ? ? ?V4.73
FreeRTOS? ? ? ? ? ?V8.2.3
uCOS-II????????????? V2.92.11
uCOS-III???????????? V3.05.00
測(cè)試方法是,主要使用RTOS的信號(hào)量,測(cè)試RTOS任務(wù)切換速度。建立三個(gè)任務(wù)。
任務(wù)A:接收到任務(wù)B發(fā)的信號(hào)量B2A之后,發(fā)送信號(hào)量A2B;任務(wù)優(yōu)先級(jí)率高
任務(wù)B:接收到任務(wù)A發(fā)的信號(hào)量A2B之后,發(fā)送信號(hào)量B2A,并計(jì)數(shù);任務(wù)優(yōu)先級(jí)低
主任務(wù):初始化時(shí),發(fā)送一次信號(hào)量B2A,是AB任務(wù)開始循環(huán)執(zhí)行。并計(jì)時(shí)1S,打印出任務(wù)切換次數(shù)。任務(wù)優(yōu)先級(jí)最高。
由于我個(gè)人對(duì)uCOS和FreeRTOS比較熟悉,所以就先做了uCOS-II的測(cè)試。
一、uCOS-II任務(wù)信號(hào)量測(cè)試
程序的移植過(guò)程就不在這里說(shuō)了,直接開始測(cè)試上代碼:
建立任務(wù)堆棧和信號(hào)量,以及任務(wù)切換次數(shù)計(jì)數(shù)變量。
編寫起始任務(wù),這個(gè)任務(wù)的優(yōu)先級(jí)最高。
任務(wù)A,任務(wù)優(yōu)先級(jí)略高。其中紅色框起來(lái)的代碼是測(cè)試時(shí)候使用的。在任務(wù)B中也有類似的代碼。
任務(wù)B,任務(wù)優(yōu)先級(jí)低,但是比系統(tǒng)空閑任務(wù)要高。
在任務(wù)AB中框起來(lái)的代碼主要是進(jìn)行驗(yàn)證程序?qū)懙臏?zhǔn)確性,如果將上文中紅色框中注釋掉的代碼恢復(fù)。按照1S的時(shí)間來(lái)算:A任務(wù)獲取到信號(hào)量,延時(shí)100MS,在發(fā)送信號(hào)量給B;任務(wù)B獲取到信號(hào)量,延時(shí)100MS,在發(fā)信號(hào)給A。AB任務(wù)循環(huán),花掉大約是200MS的時(shí)間,最后主任務(wù)在1S的時(shí)間內(nèi),計(jì)數(shù)應(yīng)該是5次才對(duì)。
實(shí)際程序也確實(shí)是5次,可以證明該例程無(wú)誤,后面測(cè)試的OS調(diào)度能力的時(shí)候,只需要去掉任務(wù)AB中的100MS的延時(shí)和printf打印即可。
同樣的程序,我做了四份,分別基于UCOS-II、UCOS-III、FreeRTOS、RTX這個(gè)四個(gè)RTOS系統(tǒng)
測(cè)試代碼截圖:
注釋掉RTOS任務(wù)AB中的延時(shí)和串口打印,使用相同的優(yōu)化等級(jí),分別編譯燒錄測(cè)試代碼,串口打印如下:
上圖都是在1秒的時(shí)間,AB任務(wù)調(diào)用的次數(shù):
可以看到,就任務(wù)切換速度而言,在STM32單片機(jī)上RTX確實(shí)要快很多,RTX是Keil開發(fā)的一款RTOS,而Keil早在2005年就被ARM收購(gòu),對(duì)ARM芯片的支持和優(yōu)化應(yīng)該也是被安排到日程的。
經(jīng)過(guò)這次測(cè)試,雖然RTX在任務(wù)切換上的速度上確實(shí)要優(yōu)秀很多,但不能說(shuō)RTX就是這四款RTOS中最優(yōu)秀的系統(tǒng),本次測(cè)試也僅僅是單一的一個(gè)方面,我相信FreeRTOS以及其他的OS都有它自己的獨(dú)到優(yōu)勢(shì)。
我們作為開發(fā)使用者,沒(méi)有必要去糾結(jié)哪個(gè)是最強(qiáng)的RTOS,我們只需要找到合適我們項(xiàng)目,方便我們開發(fā)的RTOS即可。
評(píng)論