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 的抖动。