我认为我的问题很不寻常,但我想在 MATLAB Simulink 中进行实时定位,但我不想使用 XPC 目标。我只是希望程序(simulink)在运行时不会中断,以便拥有一个实时无中断控制系统。按照这个顺序,我可以在没有目标系统的情况下使用我的控制模块。
a.如果您有多核平台:远离
core 0
。 Windows 专门将某些任务分配给 core 0
。请参阅 SetThreadAffinityMask 函数以获取如何在特定内核上运行线程的信息。
b.可能会提高线程/进程的优先级。有关设置优先级的详细信息,请参阅 SetThreadPriority 函数 和 SetPriorityClass 函数,有关优先级范围的详细信息,请参阅调度优先级。
线程优先级为 THREAD_PRIORITY_TIME_CRITICAL 的优先级 REALTIME_PRIORITY_CLASS 会在线程准备好运行时以最高优先级运行。请注意,当您的线程运行时,这样的优先级设置将不允许任何其他进程/线程在该核心上获得 CPU。
Simulink 本质上是一个单线程应用程序。在 Rapid Accelerator 模式下运行时,您可以通过多种方式使用第二个核心(请参阅文档),但总的来说,所有内容都在一个核心上运行。我猜它将来可能会改变,因为很多人希望将单个大型模型的执行分散到多个核心上,但据我所知,目前这是不可能的。
然而,Simulink 不是实时应用程序,因为它运行在 Windows 或其他非实时操作系统上。为什么你不想使用 xPC Target?当您正在研究实时目标时,这将是最好的选择。其他选项是使用实时 Windows 目标、SIL 甚至 PIL(如果您可以访问实时目标硬件)。查看示例软件和处理器在环(SIL 和 PIL)模拟。我认为您可以将代码生成过程配置为仅在一个核心上执行,但最好询问 MathWorks 来确定。