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