本文档包括以下内容:
RTX工具概述
RTX主要有以下工具和实用程序来帮助用户控制RTSS程序、测量程序性能和订制实时程序:
RTX Properties | |||
RtxServer | |||
KSRTM | RTX Demo | PerformanceView | Platform Evaluator |
Timer Latency Display Tool | TimeView |
RTX属性
RTX Properties控制面板概述
标签页
|
描述
|
System
|
指定RTX子系统手动还是自动启动;改变RTX内部特性的一些方面。
|
Memory
|
配置RTSS程序的默认内存分配方式和RTX本地内存池的初始大小。可将最大内存的上限设为每次调用RtMapMemory分配到的内存大小。
|
Debug
|
选择调度RTSS程序的调度软件,设定在Windows生成的minidumps文件中添加多少附加的RTX信息。
|
Starvation
|
配置RTX如何监视Windows饥饿,设定监测到饥饿发生时RTX的行为。
|
Exceptions
|
设定RTX是冻结还是中止失败的程序,配置RTX如何对待异常。
|
Hardware
|
配置即插即用(plug-and-play)设备的支持,确定如何最优化减小RTX延迟。
|
USB
|
配置RTX USB协议栈的支持。
|
TCP/IP
|
配置RTX TCP/IP协议栈的支持。
|
Control
|
显示RTX配置信息;手动启动和停止RTX。
|
Control Settings
Control标签可以让你手动开始或者停止RTX子系统和显示如下的RTX设置和状态信息:
-
系统类型:单处理器或者多处理器系统
-
HAL类型
-
检测到的处理器数量
-
指明如果RTX运行在一个独占的处理器还是与Windows共享一个处理器
Debug Settings
RTX支持用户级调试(默认)和内核级调试。前者允许开发人员使用MS VS去调试程序,而后者则支持使用MS Windgb来调试程序。
注意:当内核级调试被激活时,串口中断也一直被激活;当内核调试在使用中时这可以引入时间延迟。
在Debug这个标签里可以进行设置。
在最下面的选项中还可以设置是否产生RTX minidump。
Exceptions Settings
1. 在Exceptions这个标签下可以进行异常设置
- Terminate the faulting process 会中止所有产生异常的进程.
- Freeze the faulting process 允许你使用 Microsoft WinDbg来调试进程数据。因为一个被冻结的进程的映像还没被卸载,所以你可以使用RTSSkill 去卸载它。
2. 设置RTX如何支持异常
Hardware Settings
即插即用设备管理
转换为RTX下的设备
电源管理配置
RTX支持如下特性:
- 使用奔腾M处理器,SpeedStep技术的电脑,取决于CPU负载的多少。
- 可为电池管理和ACPI电池轮询(微软ACPI兼容控制电池方法)的系统管理中断SMI进程
- 声音、视频和游戏控制
警告:
你可以选择部分的禁止CPU功能,但是如果你没有禁止所有专门为移动CPU的特性,RTSS程序的性能可能会很差。
通过以下方法来设置电源管理:
- 打开 RTX Properties 控制面板.
- 在 Hardware 标签页,选择 Do not allow the system to enter a Windows idle state 来禁止电源管理特性。
提示:Note: 在工作在共享模式的多处理器Windows Vista, XP and 2003 Server系统上, 这会导致共享进程或者显示 Windows CPU 使用率显示为 100%。
- 显示一个有潜在可能导致CPU延迟的个人设备驱动列表,在Latency causing devices单击 Settings. 这些设备就会有一个警告图标来告知导致延迟问题。
- 为禁用一个设备,在此列表中单击右键,然后在弹出的菜单中单击 Disable 。使用一个设备时,就在弹出的菜单中单击 Enable 。
- 单击 Close.
Memory Settings
Local Memory是RTX为满足RTSS程序内存需求而确定性地分配的内存池。RTSS程序从本地内存池分配到的内存不需要初始化一个服务请求中断Service Request Interrupt (SRI) 来从Windows请求内存。当第一个RTSS程序开始时,本地内存池就会随之创建。它为正常的非确定性的函数提供了确定性的方式,同时在系统崩溃(蓝屏)后有更大的弹性和功能。
更多信息请查看Local Memory章节。
配置内存分配选项:
1. 打开 RTX Properties 控制面板.
2. 在Memory标签页,选择默认的内存分配方式:
- Request from local memory pool 默认所有RTSS 程序从RTX本地内存池内请求内存。RTX 会在第一个RTSS程序运行时创建本地内存池。
- Request from Windows 默认所有RTSS 程序从Windows请求内存。RTX 会在第一次运行带参数 /l 的RTSSrun 或者在RTSS程序中第一次调用RtAllocateLocalMemory函数时创建本地内存池。
3. 指明本地内存池的初始大小,以字节为单位。
如果RTSS程序使用了初始分配的全部内存,RTX必须从Windows请求更多的内存。这会牵涉到SRI行为,这是非确定性的,并且在关闭句柄中不能调用。为了避免这种场景发种,必须要仔细考虑程序的内存需求并且初始分配一个支持这个需求大小的内存池。附加的内存请求有可能是初始内存池大小或者失败的内存请求大小,这取决于二者哪个更大。
4. 在 Mapped Memory 这一栏中允许用户设置每次调用RtMapMemory所能分配的最大内存的上限值。
5. 单击OK。
Starvation Settings
本节介绍如何管理饥饿情况的RTX看门狗定时器,编程技术,以及在Windows时序上发生饥饿的影响。
1. Watchdog Timer
当一个RTSS线程单独的成为CPU限制(CPU bound)时,它通常是一个程序的逻辑错误的结果(经常发生在开发阶段)。在单处理器系统上,当一个线程成为CPU限制时,Windows就停止运行了(freeze)。在一个多处理器系统上,Windows继续运行,但是不能中断那个CPU限制的线程,因为较低优先级的Service Request Interrupt (SRI) 管理线程不会运行。
RTX调度器监视使用高度密集CPU时间的RTSS程序,并且如果在你设定的一个时间内,Windows没有允许运行,那么它就会通知RTX子系统。你可以设置RTX处理这些Windows饥饿通知的方式。当这些通知被当作饥饿异常处理时,所有的RTSS程序将会停止或者中止。当这些通知被转交给Windows时,RTX调度器会在当前的tick剩余时间内作一个从RTSS到Windows的让步,以使整个系统“生存下来”,以方便分析或者调试。
Windows饥饿的时间间隔值取决于RTX加载、Win程序加载、是否使用多媒体定时器。可以在 RTX Properties里设置Starvation选项。
看门狗管理
对此情况,你可以使用RTX饥饿管理看门狗定时器。此定时器在每次定时中断时检查同一线程的连续运行或者是影响Windows的RTSS线程。可以配置此定时器结束时RTX的行为:
-
增加一个异常;一个弹出的消息通知你出现的错误;然后Windows恢复正常运行。导致出现这个问题的那个进程可能被停止或者中止,这取决于RTX Properties里在 Process Exception Disposition 这个选项卡里的设置。可以用RTSSkill工具来卸载停止的进程。
-
RTX在当前tick的剩余时间内作一个从RTSS到Windows的上下文切换,这可能会延迟一个RTSS线程一个HAL定时器的周期这么长的时间。
2. 编程技术和考虑
一个程序也许表现正确,然后它可能会有一个或多个线程在某段时间内成为CPU限制。在这种情况下,你可以在这段时间内周期性的分给Windows一小段时间。这也许是有必要的,例如,让Windows清空RS232 UART的发送区,应答网络请求,执行磁盘IO,移动鼠标指针或者在GUI上显示什么东西。
你可以使用一个周期性的停止CPU限制线程一小段时间的定时器handler来轻松管理这种情况。例如,一个程序每秒运行一个线程100ms的时间,你就可以在它运行的100ms时间内每10ms中止此线程0.5ms。你可以创造一个算法来支持饥饿管理。通常,5%的任务周期是一个理想的初始化设置。你可以用算法来测量和调整你的饥饿管理。
一个例程, starvation.c, 证明了此种用法. 它位于: C:/Program Files/Ardence/RTX SDK/Samples/Starvation
另一个与饥饿管理有关的包含在对Sleep的调用中,这会在你的RTX程序中分出一小段一小段的时间给Windows运行。
3. Windows饥饿和Windows时间片
测试表明,在高密集CPU的RTX程序运行时,Windows饥饿会达到一个临界点,在此临界点处一些系统的执行会给Windows时间片带来负面效果。
如果你的RTX系统影响到了Windows时间片,这时你可能需要改变RTX定时器和饥饿设置:
-
如果你的程序没有使用Windows多媒体定时器,设置HAL定时器周期为你的程序需要的值,然后设置Starvation Time Out (ms) 为14000,设置Starvation Behavior 为 Yield to Windows.Tip:.不使用Windows多媒体定时器的程序,最好是将Starvation Time Out 设置为两个定时周期小于15ms。
-
如果你的程序使用了Windows多媒体定时器,设置HAL定时器周期为你的程序需要的值,然后设置Starvation Time Out (ms) 为14000,设置Starvation Behavior 为 Yield to Windows.Tip:使用Windows多媒体定时器的程序,最好是将Starvation Time Out 设置为低于多媒体定时器的定时周期。
System Settings
Startup Type 指定RTX驱动和服务的启动情况,是系统开始后自动启动还是手工启动,是由用户指定还是由相关进程指定。
Behavior 更改RTX子系统的内部行为。这些设置会在重启RTX之后生效。
Processes 指定允许一次性能够最多运行的RTSS进程数。这个值不包括正在被调试的进程。
1. Startup Type
- Automatic: 在系统引导过程中,当Windows系统服务(SERVICE_SYSTEM_START)启动时,RTX 子系统启动。结合Boot startup 设置, RTSS 进程可以设置为在引导时运行。 (See Supporting Boot Time Applications and RTSS DLLs).
- Manual: 在手动启动(在Control标签页内可以设置)或者相关进程运行时,RTX subsystem 才启动。这可以是一个RTSS 程序,也可以是一个链接到RTX的Windows 程序。
2. Behavior
HAL Timer Period:这是一个RTX程序中定时器功能用来同步的内部定时器对象。默认值为500ms。如果一个RTX程序需要更高分辨率的HAL Timer Period,那么将此值设置为需要的值。
提示: 如果把此值设置为10 ms以下, 可能会给Windows 操作系统带来负面影响。这是因为,在一个更低速的系统中,系统时钟tick一次可能会比 HAL timer period还要长。如果你想把此值设置为10 ms以下,请尽可能的进行系统测试。
Time Quantum:RTX被配置为运行于最高优先级线程,不管是结束还是执行时。在一个给定的优先级中没有轮叫(round robin)。为改变这一方式并让RTX在一个优先级中提供时间片,可以为所有RTSS线程设置Time Quantum。
默认值(0)表明线程一直运行到结束。
TCP/IP Settings
略