Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
μC/OS-II实时性能测试与研究[ZZ]
发布于 2009-04-24 12:46:25 浏览:3714
订阅该版
实时性是指系统能够在限定的时间内完成任务并对外部的异步事件作出及时响应。在大多数工业控制中,对实时性的要求非常高。 实时操作系统是能够满足实时系统中实时任务的处理响应时间要求的操作系统。实时操作系统是事件驱动(event-driven)的,能对来自外界的作用和信号在限定的时间范围内作出响应。它强调的是实时性、可靠性和灵活性,与实时应用软件相结合成为有机的整体,起着核心作用;由它来管理和协调各项工作,为应用软件提供良好的运行软件环境及开发环境。在多任务实时系统中,必然由实时操作系统来对实时任务进行管理。 μC/OS-II是一种结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。 现在许多工业控制系统用到了μC/OS-II,为了对其实时性有更深入具体的了解,本文对μC/OS-II的实时性进行了测试和分析,在实时系统设计中具有现实意义。 1 μC/OS-II实时性能测试指标 衡量嵌入式实时操作系统的好坏一般主要参考以下主要性能指标参数:任务切换时间、中断响应时间、任务响应时间、任务创建/删除时间、交替信号量时间、取得/释放信号量时间、交替消息队列传输时间等。本文仅对前2个最重要的指标参数进行测试分析。 1.1 任务切换时间 任务切换时间(Task Content Switch Time)可以反映出RTOS执行任务的速度。 μC/OS-II使用的是占先式内核,以保证系统的响应时间。每个任务都被赋予一定的优先级,最高优先级的任务一旦就绪,就能得到CPU的控制权。当一个运行着的任务通过信号量等机制使一个更高优先级的任务进入了就绪态,μC/OS-II会进行任务调度。这时当前任务的CPU使用权就要被剥夺,那个高优先级的任务会立刻得到CPU的控制权。 每个任务都有自己的一套CPU寄存器和栈空间。任务的切换实际上就是CPU寄存器内容的切换。CPU内部寄存器越多,额外负荷就越重。 在任务切换之前还需要在就绪表中查找出优先级最高的任务,它由任务调度函数OSSched()完成,是比较花费时间的。因为这个函数有固定长度的语句,所以它的执行时间是常数,与应用程序建立了多少个任务没有关系。 所以任务切换时间取决于CPU有多少寄存器要出入栈,以及相关调度函数的执行速度。 1.2 中断响应时间 中断响应时间(Interrupt Response Time)可以反映出RTOS对外界变化的反应速度,是指从中断发生起到执行中断处理程序的第一条指令所用的时间。它是衡量嵌入式实时操作系统实时性能的最主要、最具有代表性的性能指标。 中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间 中断延迟时间=关中断的最长时间+开始执行中断服务子程序(ISR)的第1条指令的时间 关中断的最长时间取决于运行时不同的情况,其他参数在其系统中都有固定长度代码。中断响应是系统在最坏情况下响应中断的时间。 2 μC/OS-II实时性能测试原理 2.1 任务切换时间测试原理 任务切换时间测试是利用系统内部的定时器计算任务切换时间。给定时器一个初始值a1,并建立两个任务;在任务1中开启定时器,利用消息邮箱切换到任务2,停止计时,记录定时器的值为a2。设系统时钟的计数频率为f,任务切换时间为Ttest,则: Ttest=(a1-a2)/f (1) 2.2 中断响应时间测试原理 中断响应时间测试同样也是利用定时器计算中断响应时间。给定时器一个初始值a1,建立一个任务和定时器中断服务函数,在任务中开启定时器;当定时器自减为0时,进入中断服务子函数,在该子函数中关闭定时器,记录定时器的值为a2。注意:定时器归0后自动变为初始值a1。设系统时钟的计数频率为f,中断响应时间为Tirt,则: Tirt=(a1-a2)/f (2) 3 μC/OS-II实时性能测试步骤及结果 本文测试使用的硬件平台为2410开发板,其中处理 器采用Samsung公司的S3C2410X。S3C2410X是一款基于ARM920T内核的16/32位RISC嵌入式处理器,系统主频是202.8 MHz。 3.1 任务切换时间测试步骤及结果 ①系统时钟初始化。这里只用到定时器0。PCLK=FCLK/4-202.8 MHz/4=50.7 MHz,预分频值设置为0,除法器设为1/4,所以最小分频为0.08 μs,f=12.5 MHz。计时器0初始值TCNTB0设为60 000,即a1=60 000. ②如图1所示,建立两个任务:Task_TCST_Start()和Task_TCST_End()。Task_TCST_ End优先级高,运行后因等待邮箱的消息而挂起等待;然后Task_TCS'T_Start开始运行,向邮箱发送一则消息,同时定时器开始计时;之后该任务延时一段时间,进入挂起状态。Task_TCST_End收到邮箱消息,由等待状态进入就绪态,因为拥有就绪态队列中的最高优先级,所以获得CPU使用权。它进入运行态后立即停止计时,记为a2。 ③根据式(1)计算结果。 ④重复10次实验,取最大值为5.36μs。 需要注意2点:其一,有意义的任务切换时间和中断响应时间是系统在最坏情况下发生的,所以不能取平均值,应该取最大值。其二,因为定时器是循环计数的,即从初始值自减到0,然后恢复初始值,继续自减。所以停止计时时,定时器可能经过了两次或多次循环。设计程序时要注意这一点。在本次实验中,循环最大间隔为60 000×0.08μs=4 800μs,远大于一次任务切换时间或中断响应时间,所以定时器没有经过多次循环。 3.2 中断响应时间测试步骤及结果 ①同任务切换时间测试。 ②如图2所示,建立一个任务Task_IRT_Test和定时器0对应的中断服务子程序 Timer0_IRT_Test。在任务中开启定时器0,当定时器0自减到0时,CPU响应该中断, CPU的中断向量跳转到定时器0的中断服务子程序Timer0_IRT_Test:,由它保存CPU的全部寄存器;然后通知内核进入中断服务子程序,同时将堆栈指针保存到当前任务控制块OS_TCB中,之后用户的中断服务代码开始执行,在此停止定时器0,读出它的数值a2。 ③根据式(2)计算结果。 ④重复10次实验,取最大值0.24μs。 4 CPU运行频率对μOS-II实时性的影响 将CPU运行频率分别降低到152.00 MHz、101.25MHz、67.50 MHz和33.75 MHz。 测试方法不变,其测试结果分别如图3和图4所示。其中,任务切换时间的最大值分别为7.14μs、10.74μs、16.35μs、32.71μs;中断响应时间的最大值分别为0.32μs、0.47μs、0.95μs、1.90μs。 测试结果分析,总体上,随着CPU运行频率的增加,任务切换时间和中断响应时间都会减小,且呈非线性变化。特别是CPU运行频率较低时,其变化对实时性能影响较大;当CPU运行在较高的频率时,其变化幅度相对要小些。其非线性变化是与最小分频时间相关的。 这说明CPU运行频率对实时性能起着非常重要的作用。因为它直接决定指令的处理周期,频率增加时,指令周期减小,系统用于同步等待的时间缩短,CPU执行每条语句的速度加快,保存和恢复CPU寄存器内容的速度也相应加快,因此实时性能变得更好。 5 CPU利用率对μC/OS-II实时性能的影响 之前的测试都是在CPU负荷较小的情况下进行的,当CPU负荷增大(即利用率升高)时,实时性又会如何变化呢?这里建立了N个相同的任务,同时进行大批量的浮点运算。再建立一个任务,利用μC/OS-II自带函数OSStat()计算CPU利用率。对应不同的N值,有不同的CPU利用率,分别测试其实时性,得到的结果如图5所示。测试结果表明:当CPU负荷增大时,任务切换时间会增加,中断响应时间也会略有增加。CPU利用率对系统的实时性能有一定的影响,但不是很大。 6 结论 本文在特定的硬件平台上测得μC/OS-II在不同情况下的任务切换时间和中断响应时间,能较好地反映出它的实时性能。测试方法在没有精密仪器的条件下即可完成,具有简单易行、硬件依赖性低、可信度高的特点,为开发人员将μC/OS-II用于嵌入式操作系统的实时应用提供了依据。
查看更多
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
3.7k
关于作者
shaolin
这家伙很懒,什么也没写!
提问
115
回答
444
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
5
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部