Mode Switch

steve freyder steve at freyder.net
Sun Jan 3 23:16:06 CET 2021


Might need some help from Philippe on this one but my thinking says that 
thread creation happens in secondary mode, so there's gotta be at least 
*one* mode switch on the way to becoming a cobalt thread running in 
primary mode, perhaps the second one has to do with launching the 
background printf() helper thread?



On 1/3/2021 4:08 PM, Leandro Bucci wrote:
> But in the task I don't do any printf, how is it possible that MSW = 2?
>
> Il dom 3 gen 2021, 23:00 steve freyder <steve at freyder.net 
> <mailto:steve at freyder.net>> ha scritto:
>
>     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