Mode Switch

steve freyder steve at freyder.net
Sun Jan 3 23:00:21 CET 2021


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);
> }


More information about the Xenomai mailing list