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