<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[gOxiA=苏繁=SuFan Blog]]></title> 
<link>https://sufan.maytide.net/index.php</link> 
<description><![CDATA[gOxiA,苏繁,sufan,Microsoft MVP]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[gOxiA=苏繁=SuFan Blog]]></copyright>
<item>
<link>https://sufan.maytide.net/read.php/2169.htm</link>
<title><![CDATA[HOWTO: 设置 Windows IoT 设备以实现 Soft Real-Time]]></title> 
<author>gOxiA &lt;sufan_cn@msn.com&gt;</author>
<category><![CDATA[Windows Client]]></category>
<pubDate>Mon, 20 Oct 2025 04:43:21 +0000</pubDate> 
<guid>https://sufan.maytide.net/read.php/2169.htm</guid> 
<description>
<![CDATA[ 
	<p><img alt="Windows_logo_horiz_blue_rgb" src="http://goxia.maytide.net/ftpup/2018/Windows-_8577/Windows_logo_horiz_blue_rgb_thumb.png"></p><p><strong><font color="#fd3f0d" size="4">HOWTO: 设置 Windows IoT 设备以实现 Soft Real-Time</font></strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天 <a href="https://goxia.maytide.net" target="_blank">gOxiA</a> 要分享是如何设置 Windows IoT 设备以实现 Soft Real-Time，在开始前我们需要先了解一下什么是 Real-Time！这里的 Real-Time 通常是指实时操作系统，运行在其中的程序执行结果和获得这些结果所花费的时间是确定的，而我们平常使用的操作系统在运行程序时只会给出确定性的结果，但允许有不确定的时间来完成任务。实时操作系统有硬实时和软实时两种，前者是可以确定到确切时刻的系统，如汽车发动机或飞机内的微型控制器、打印机、激光切割机等。而后者如其名会有一些操作系统的抖动，虽然程序完成的时间窗口很小但仍不是精确的时刻，其精度较低，但可以在多核上运行并对应用程序施加较少的限制。此外，实时性能不代表更快的性能，只是可预测的性能，如果我们的应用场景有实际的限制，例如必须在机器人环境改变之前执行的计算或必须在传送带移动之前激活的电机，那么软实时可能就是我们所需要的。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从 Windows 10 IoT Enterprise 21H2 开始支持 Soft Real-Time，通过以下四个关键设置引入：</p><ol><li>CPU 隔离：将系统级干扰从隔离的 CPU 迁移出去，减少对用户实时应用程序的潜在抖动</li><li>自定义 ISR (Interrupt Service Routine - 硬件中断发生时立即执行)/DPC (Deferred Procedure Call - ISR 结束后由系统调度执行)在独立实时 CPU 上高度绑定执行：所有硬件中断都路由到系统和非实时内核，但通过编写自定义 ISR/DPC 驱动程序，可将设备特定的中断路由到实时内核。</li><li>互斥体的优先级继承：通过启用优先级继承，系统在检测到高优先级线程等待低优先级线程持有的互斥体时，会自动调整线程优先级，从而保持任务调度的实时性与确定性。</li><li>最多16个RT线程优先级别：通过提供16个可配置的实时线程优先级级别，系统允许开发者根据任务的重要性分配资源，以实现对执行顺序的精确控制。</li></ol><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来 gOxiA 将在 Windows 11 IoT Enterprise 24H2 上配置以实现 Soft Real-Time：</p><ol><li>禁用空闲状态</li><ul><li><strong><em>powercfg.exe /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IdleDisable 1</em></strong></li><li><strong><em>powercfg.exe /setactive SCHEME_CURRENT</em></strong></li></ul><li>禁用服务</li><ul><li><strong><em>sc config dps start=disabled</em></strong></li><li><strong><em>sc config audiosrv start=disabled</em></strong></li><li><strong><em>sc config sysmain start=disabled</em></strong></li></ul><li>禁用 Windows 更新</li><ul><li><strong><em>sc config wuauserv start=disabled</em></strong></li></ul><li>禁用线程 DPC</li><ul><li><strong><em>reg add "HKLM\System\CurrentControlSet\Control\Session Manager\kernel" /v ThreadDpcEnable /t REG_DWORD /f /d 0</em></strong></li></ul><li>设置 Windows IoT CSP 以实现实时性能</li><ul><li>以 <strong><font style="background-color: rgb(255, 255, 0);">SYSTEM</font></strong> 权限执行以下脚本：</li><ul><p><strong><em>$nameSpaceName="root\cimv2\mdm\dmmap"<br/>$className="MDM_WindowsIoT_SoftRealTimeProperties01"<br/>$obj = Get-CimInstance -Namespace $namespaceName -ClassName $className<br/>Add-Type -AssemblyName System.Web<br/>Set-CimInstance -CimInstance $obj<br/>$obj.SetRTCores = 3<br/>Set-CimInstance -CimInstance $obj</em></strong></p></ul></ul></ol><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个配置中，我们将在一个 4 核 CPU 上保留 3 个内核（3、2、1）用于实时任务，并将内核 0 留给系统和非实时任务。注意：系统会从编号最高的核心开始分配实时用途，然后依次向下，但是无法保证实时核心始终位于最高编号，其不会自动调整。</p><p><a href="http://goxia.maytide.net/ftpup/2025/HOWTO-_9522/Soft-Real-Time.png"><img width="630" height="472" title="Soft-Real-Time" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Soft-Real-Time" src="http://goxia.maytide.net/ftpup/2025/HOWTO-_9522/Soft-Real-Time_thumb.png" border="0"></a></p><p>视频Demo：<a title="https://weibo.com/tv/show/1034:5223802787790893?from=old_pc_videoshow" href="https://weibo.com/tv/show/1034:5223802787790893?from=old_pc_videoshow">https://weibo.com/tv/show/1034:5223802787790893?from=old_pc_videoshow</a></p>
]]>
</description>
</item>
</channel>
</rss>