2012-03-21 19 views
0

Xenomai APIで無限ループのhello worldプログラムを書きました。 これはすぐに終了します。リアルタイムで無限ループを実行する方法 - Linux?

実際にこのプログラムのリアルタイム待ち時間をlatencytopでテストしたかったのです。
無限ループをリアルタイムで実行するにはどうすればよいですか?

RT_TASK demo_task; 

void demo(void *arg) 
{ 
    RT_TASK *curtask; 
    RT_TASK_INFO curtaskinfo; 

    curtask=rt_task_self(); 
    rt_task_inquire(curtask,&curtaskinfo); 

    printf("Task name : %s \n", curtaskinfo.name); 

     //------------------ hello world -------------------- 
    while (1) 
    { 
     printf("Hello World!\n"); 
    } 

} 

int main(int argc, char* argv[]) 
{ 
    char str[10]; 

    rt_print_auto_init(1); 

    mlockall(MCL_CURRENT|MCL_FUTURE); 

    printf("start task\n"); 

    sprintf(str,"hello"); 
    rt_task_create(&demo_task, str, 0, 50, 0); 

    rt_task_start(&demo_task, &demo, 0); 
} 

答えて

4

メインの一番下にも、無限ループを入れます。一方、(1)スリープ(10000)は通常、本格的なLinux上では良いですが、RT-worldについてはわかりません。

何が起こっているのは、あなたが新しい仕事を産み出しているということです。その後、メインは直ちに帰ってプロセス全体を終了します。

0

私は同意:

何が起こっているあなたは、新しいタスクをオフに産卵し、メインしているということです、すぐに全体のプロセスを終了され、この後に戻っています。

はしかし、IMO、あなたはリアルタイムタスクの終了時に

待つために、メインの終わりにrt_task_join()を使用する必要があります。 [1]

[1] https://xenomai.org/documentation/trunk/html/api/group__task.html

関連する問題