D 编程/RTAI/LXRT
外观
为了使任务计时与 RTAI 一致,您有两种可能性
- 周期性计时器模式
- 一次性计时器模式
您可以在 RTAI 调度程序概述 中阅读有关此内容的信息。为了显示差异
- 周期性模式
- 使用 8254 芯片。它以 1193180 Hz 的固定频率运行。如果要制作一个 1 kHz 的循环事件,它可以将计时器周期设置为 100 µs。在循环任务中始终调用 rt_sleep_until() 与下一次。结果是 1 kHz 任务,抖动为 100 µs。
- 一次性模式
- 内部时钟与 CPU 时钟同步。对于每个计时器事件,RTAI 都必须为下一个事件重新编程计时器。这是一个开销,但具有最高时间分辨率的优点。
要使用 LXRT 创建循环任务,首先像往常一样创建一个新线程。
threadHandle = rt_thread_create( &threadFunc )
然后像这样实现线程
void threadFunc()
{
RT_TASK *handler;
handler = rt_task_init( 0, 0, 0, 0);
if (handler==null){
// error handling
}
rt_allow_nonroot_hrt();
mlockall(MCL_CURRENT | MCL_FUTURE);
//rt_set_periodic_mode();
rt_set_oneshot_mode();
RTIME period = nano2count( 1_000_000_000l );
start_rt_timer(period);
rt_make_hard_real_time();
RTIME currentTime = rt_get_time_ns();
while( stopCondition )
{
currentTime += period;
rt_sleep_until( currentTime );
// the work to do ...
}
stop_rt_timer();
rt_make_soft_real_time();
rt_task_delete(handler);
}
使用这种设置,您可以实现小于 10 µs 的抖动。
