本部分包含实时网络(NAL 和 RT-TCP/IP 栈)的有用提示,技巧和配置建议。
数据包调度 Mini Port 驱动程序
网络适配器在 Windows 设备管理器中可能有多个实例:一个用于 NIC 驱动程序,另一个用于和其关联的数据包计划微型端口(Mini Port)驱动程序。将适配器从 Windows 转换为 RTX64 控制时,只需转换 NIC 驱动程序,无需转换关联的微型端口驱动程序。
注意:与您转换的 NIC 关联的微型端口驱动程序可能会出现警告。这是预期行为,无需采取进一步操作。
端口IO冲突
当 RTX64 设备和 Windows 设备使用相同的 IO 空间地址范围时,可能会发生冲突。如果该 IO 空间不是 RTX64 设备所需的资源,则可以过滤掉该 IO 端口资源。此操作可以在 Windows 设备转换为 RTX64 设备后完成。
栈响应延迟
栈启动后,将在联机(online)之前进行初始化过程。如果在初始化完成之前调用栈,将遇到栈的延迟响应。RTX64 提供了获取联机状态的 API 函数:
- RtnIsDeviceOnline:获取用于链路状态监控网络设备的在线状态
- RtnIsStackOnline:获取 RT-TCP/IP 栈的在线状态
以 Verbose 模式运行
在 Verbose 模式下运行 RT-TCP/IP 栈,可以启用详细得日志记录,有助于确定问题。使用 RTX64 控制面板启用 Verbose 模式:
使用 RTX64 控制面板启用 Verbose 模式:
- 打开 RTX64 控制面板;
- 单击 配置和控制网络(Configure and Control the Network);
- 选中 Run in verbose mode 复选框启用 Verbose 模式;取消选中禁用 Verbose;
注意:在 Verbose 模式下运行栈可能会导致 RT-TCP/IP 栈在系统关闭期间变慢。
注意:必须重启网络才能使更改生效。如果正在更改其他需要重新启动网络的设置选项,请先进行这些更改,然后再重新启动 NAL。重新启动之前,必须停止所有启用网络的进程。
驱动程序锁定的潜在原因
如果驱动程序的中断线程优先级小于发送数据的应用程序线程得优先级,可能会导致设备接口锁定。
错误信息
错误信息 | 含义 |
---|---|
tfSheapMalloc: Memory allocation failed. Increase the configuration for the TCP/IP Stack heap tfSheapMalloc:内存分配失败。增加 TCP/IP 栈堆的配置 | 当没有为堆栈分配足够的内存,或者用于 send 或 sendto 的缓冲区太大时,就尝试增加最大套接字数,可能会出现此错误。要解决此问题,可通过控制面板增加栈堆大小。默认值为 4096 KB。 |
tfCountSemAlloc: The configured value of MaxConcurrency is too low. tfCountSemAlloc:配置的最大并发数太低。 RTTCPIP: FATAL ERROR in TCP/IP STACK. Please terminate attached applications and stop the Stack. RTTCPIP:TCP/IP 栈出现致命错误。请终止附加的应用程序并停止栈。 | 如果为 TCP/IP 栈配置的最大并发数太低,则会出现此类错误。要解决此问题,请通过控制面板增加最大并发数,停止正在使用栈的 RTSS 应用,然后重新启动栈 |
RTTCPIP: PLEASE RESTART TCP/IP STACK! It’s not safe after an exception in a socket application. RTTCPIP:请重新启动 TCP/IP 栈!Socket 应用程序发生异常后已不安全。 | 如果 RTSS 应用程序未完成 Socket API 调用,以及阻止了 recv,recffrom,accept 或 select 的情况下生成异常时,会发生此错误。RT-TCP/IP 栈不可能清理其资源并继续运行,因为这可能会导致 BSOD 或锁定。 |
RTTCPIP: Error in RtndInitializeInterface for network card RtNalIGB. RTTCPIP:网卡 RtNalIGB 的 RtndInitializeInterface 错误。 RTTCPIP: Error (0x5) initializing interface card RtNalIGB. RTTCPIP:初始化接口卡RtNalIGB 时出错(0x5)。 | 错误 0x5 是指 ERROR_ACCESS_DENIED。这意味着栈需要的接收和/或发送队列已被另一个 NAL 应用程序使用。 注意:错误代码中的 RtNalIGB 仅作为示例。 |