Each time I would do something like this:
printf(...) ; fflush(stdout) ; rt_task_sleep(1e9/5) ; rt_task_inquire(...) ; msw incremented by 1, csw would increment by 2. On 1/3/2021 2:29 PM, Leandro Bucci via Xenomai wrote:
Hi, I have a strange behavior regarding the "mode switch". In the attached code, the task should never switch to the Linux domain, but instead I have a value of MSW = 2. How is it possible? Even if I do a printf in the task I always get MSW = 2. I can't understand where the problem is. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <alchemy/task.h> #include <alchemy/timer.h> RT_TASK task; RT_TASK_INFO info; void task_body(void *arg) { rt_task_inquire(NULL, &info); } int main() { int err; err = rt_task_create(&task, "mytask", 0, 1, 0); if (err != 0){ fprintf(stderr, "failed to create task\n"); exit(EXIT_FAILURE); } err = rt_task_start(&task, &task_body, NULL); if (err != 0){ fprintf(stderr, "failed to start task\n"); exit(EXIT_FAILURE); } sleep(5); //sleep for 5 seconds printf("mode switch = %d\n", (int)(info.stat.msw)); exit(EXIT_SUCCESS); }