Как запустить бесконечный цикл в реальном времени - Linux? - PullRequest
0 голосов
/ 21 марта 2012

Я написал программу hello world с бесконечным циклом с API-интерфейсом Xenomai следующим образом: Это скоро завершится.

Я действительно хотел проверить задержку этой программы в реальном времени через 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);
}

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

В нижней части основного, также положить бесконечный цикл.в то время как (1) сон (10000) обычно хорош для полноценного Linux, не знаю о RT-мире.

То, что происходит, это то, что вы порождаете новое задание, а затем main немедленно возвращаетсяпосле этого, который завершает весь процесс.

0 голосов
/ 25 июня 2015

Я согласен:

То, что происходит, это то, что вы порождаете новую задачу, а затем сразу же возвращается main, после чего завершается весь процесс.* Но, IMO, если вы используете rt_task_join() в конце main для

Ожидание завершения задачи в реальном времени.[1]

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

...