0

次のように、Xenomai API を使用して無限ループの hello world プログラムを作成しました。これはすぐに終了します。

私は実際に、このプログラムのリアルタイム レイテンシを でテストしたかったの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

2 に答える 2

4

main の一番下にも、無限ループを入れます。while(1) sleep(10000) は通常、本格的な Linux で有効ですが、RT の世界については知りません。

何が起こっているかというと、新しいタスクを生成し、その後 main がすぐに返され、プロセス全体が終了します。

于 2012-03-21T10:46:59.453 に答える
0

同意します:

何が起こっているかというと、新しいタスクを生成し、その後 main がすぐに返され、プロセス全体が終了します。

rt_task_join()しかし、IMO、メインの最後に使用する必要があります

リアルタイム タスクの終了を待ちます。[1]

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

于 2015-06-25T13:20:03.780 に答える