我了解您要模拟的 Arinc653 调度程序的特性是时间分区。ThreadX 调度策略基于优先级、抢占阈值和时间片。
您可以使用 ThreadX 模拟时间分区。为此,您可以使用计时器,您可以在其中暂停/恢复每个帧的线程。定时器在与线程不同的上下文中执行,它们是轻量级的并且不受优先级的影响。默认情况下,ThreadX 使用一个定时器线程,设置为最高优先级,来执行线程;但为了获得更好的性能,您可以编译 ThreadX 以在 IRQ 中运行计时器(定义选项 TX_TIMER_PROCESS_IN_ISR)。
一个例子:
- 线程 thd1,thd2,thd3 属于帧 A
- 线程 thd4,thd5,thd6 属于框架 B
- 每帧变化触发一次定时器 tm1
tm1 的伪代码:
tm1()
{
static int i = 0;
if (i = ~i)
{
tx_thread_suspend(thd1);
tx_thread_suspend(thd2);
tx_thread_suspend(thd3);
tx_thread_resume(thd4);
tx_thread_resume(thd5);
tx_thread_resume(thd6);
}
else
{
tx_thread_suspend(thd4);
tx_thread_suspend(thd5);
tx_thread_suspend(thd6);
tx_thread_resume(thd1);
tx_thread_resume(thd2);
tx_thread_resume(thd3);
}
}