UCOS-II/II、FreeRTOS、RTX四大RTOS系统性能对比

RTOS
川楠
发布时间: 2018-12-22
阅读: 11740


         大家好,感谢社区提供的板卡。这次的使用对象是安富莱的STM32-V6板卡。由于之前用过安富莱的V4板卡,所以安富莱给我留下了很深的印象,他们开发板的资料很过硬,售后完善,线上QQ技术支持也很给力,作为学习,确实是一款很不错的板卡。唯一的是,安富莱很少出视频,其主要是编写PDF教学手册和程序例程。

         另外他们的按键检测代码,很紧凑,有单发、连发、长按、短按、上升沿触发、下降沿触发等功能,是我见到最棒的按键检测代码。

11.jpg

         STM32-V6是一款基于STM32F429单片机的开发板,整板采用4层板设计,本次选择它的目的,除了测试其能做常用外设开发驱动,安富莱还对它做了一个示波器的例程。虽然示波器的性能不强,但是去十分有意思。另外其支持VNC虚拟屏幕功能。开发者可以不用LCD显示屏幕,直接使用PC屏幕作为自己的开发板屏幕,十分方便。所以这个板子真的很强大。22.jpg

         拿到板子,在我查看他们的网络示波器例程后,发现安富莱只做了基于RTX的例程,并没有做基于uCOSFreeRTOS的例程,这样我感到很奇怪。因为安富莱的每个例程都会做三个OS版本,唯独这个例程却只制作了一个基于RTX的。他们的技术支持回复是:“FreeRTOS的性能不行,所以对这个网络示波器的的应用来说,没有制作这方面的例程”,这让我感到很疑惑,FreeRTOS作为一款开源RTOS,性能真有这么差么?到底他们之间的差距又有多大?

         所以才有这次做UCOS-IIUCOS-IIIFreeRTOSRTX系统性能对比测试,本次我只是站在一个使用者的角度,测试四个RTOS单一的系统调度性能。尽量使4RTOS处在同一水平上测试:

l  使用相同的硬件平台和相同的资源

l  单片机都使用相同的主频,只是单片机的Uart资源

4RTOS并非都裁剪到极致,保留信号量、队列、消息等功能。

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,打印出任务切换次数。任务优先级最高。

 

由于我个人对uCOSFreeRTOS比较熟悉,所以就先做了uCOS-II的测试。

 

一、uCOS-II任务信号量测试

         程序的移植过程就不在这里说了,直接开始测试上代码:33.jpg

建立任务堆栈和信号量,以及任务切换次数计数变量。44.jpg

编写起始任务,这个任务的优先级最高。55.jpg

任务A,任务优先级略高。其中红色框起来的代码是测试时候使用的。在任务B中也有类似的代码。66.jpg

任务B,任务优先级低,但是比系统空闲任务要高。

 

         在任务AB中框起来的代码主要是进行验证程序写的准确性,如果将上文中红色框中注释掉的代码恢复。按照1S的时间来算:A任务获取到信号量,延时100MS,在发送信号量给B;任务B获取到信号量,延时100MS,在发信号给AAB任务循环,花掉大约是200MS的时间,最后主任务在1S的时间内,计数应该是5次才对。77.jpg

实际程序也确实是5次,可以证明该例程无误,后面测试的OS调度能力的时候,只需要去掉任务AB中的100MS的延时和printf打印即可。

 

同样的程序,我做了四份,分别基于UCOS-IIUCOS-IIIFreeRTOSRTX这个四个RTOS系统88.jpg

测试代码截图:

99.jpg

a1.jpg

a2.jpg

注释掉RTOS任务AB中的延时和串口打印,使用相同的优化等级,分别编译烧录测试代码,串口打印如下:

 a3.jpg

 a4.jpg

上图都是在1秒的时间,AB任务调用的次数:

 a5.jpg


         可以看到,就任务切换速度而言,在STM32单片机上RTX确实要快很多,RTXKeil开发的一款RTOS,而Keil早在2005年就被ARM收购,对ARM芯片的支持和优化应该也是被安排到日程的。


         经过这次测试,虽然RTX在任务切换上的速度上确实要优秀很多,但不能说RTX就是这四款RTOS中最优秀的系统,本次测试也仅仅是单一的一个方面,我相信FreeRTOS以及其他的OS都有它自己的独到优势。


  我们作为开发使用者,没有必要去纠结哪个是最强的RTOS,我们只需要找到合适我们项目,方便我们开发的RTOS即可。


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (2)
川楠 擅长:单片机综合应用 硬件设计
评论(0)

登录后可评论,请 登录注册

相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)