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