<span style=" font-size:10pt;font-family:sans-serif">> Probably, the
print statement comes after the event send in your task, </span>
<br><span style=" font-size:10pt;font-family:sans-serif">> and the event
send is causing the task to self-suspend.  </span>
<br>
<br><span style=" font-size:10pt;font-family:sans-serif">Actually, no:</span>
<br>
<br><a href="https://gitrepos.estec.esa.int/ttsiodras/RTEMS-build-workflows/-/blob/master/OAR/src/task1.c#L48"><span style=" font-size:10pt;color:blue;font-family:sans-serif">https://gitrepos.estec.esa.int/ttsiodras/RTEMS-build-workflows/-/blob/master/OAR/src/task1.c#L48</span></a>
<br>
<br><span style=" font-size:10pt;font-family:sans-serif">with the task_end
doing the event send after a (flushed) print:</span>
<br>
<br><a href="https://gitrepos.estec.esa.int/ttsiodras/RTEMS-build-workflows/-/blob/master/OAR/src/common.c#L13"><span style=" font-size:10pt;color:blue;font-family:sans-serif">https://gitrepos.estec.esa.int/ttsiodras/RTEMS-build-workflows/-/blob/master/OAR/src/common.c#L13</span></a>
<br>
<br><span style=" font-size:10pt;font-family:sans-serif">Note that this
test (complete code in </span><a href="https://gitrepos.estec.esa.int/ttsiodras/RTEMS-build-workflows/-/tree/master/OAR"><span style=" font-size:10pt;color:blue;font-family:sans-serif">https://gitrepos.estec.esa.int/ttsiodras/RTEMS-build-workflows/-/tree/master/OAR</span></a><span style=" font-size:10pt;font-family:sans-serif">
) creates the proper - non-interleaved - output when compiled and executed
for the GR712RC and GR740 boards... but creates the interleaved output
in a ZynQ ZC706 board.</span>
<br>
<br><span style=" font-size:10pt;color:#000080;font-family:sans-serif"><b>Thanassis
Tsiodras</b></span>
<br><span style=" font-size:10pt;font-family:sans-serif">Real-time Embedded
Software Engineer </span>
<br><span style=" font-size:10pt;font-family:sans-serif">System, Software
and Technology Department</span>
<br>
<br><span style=" font-size:10pt;font-family:sans-serif"><b>ESTEC</b></span>
<br><span style=" font-size:10pt;font-family:sans-serif">Keplerlaan 1,
PO Box 299</span>
<br><span style=" font-size:10pt;font-family:sans-serif">NL-2200 AG Noordwijk,
The Netherlands</span>
<br><span style=" font-size:10pt;font-family:sans-serif">Thanassis.Tsiodras@esa.int
| </span><a href=www.esa.int><span style=" font-size:10pt;color:blue;font-family:sans-serif">www.esa.int</span></a>
<br><span style=" font-size:10pt;font-family:sans-serif">T +31 71 565 5332</span>
<br>
<br>
<br>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">From:
       </span><span style=" font-size:9pt;font-family:sans-serif">"Gedare
Bloom" <gedare@rtems.org></span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">To:
       </span><span style=" font-size:9pt;font-family:sans-serif">"Fernando
Domínguez Pousa" <fdpousa@gmv.com></span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">Cc:
       </span><span style=" font-size:9pt;font-family:sans-serif">"rtems-users@rtems.org"
<users@rtems.org></span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">Date:
       </span><span style=" font-size:9pt;font-family:sans-serif">01/05/2020
07:59</span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">Subject:
       </span><span style=" font-size:9pt;font-family:sans-serif">Re:
RTEMS tasks timesliced instead of running to completion. TIMESLICE flag
is not active!</span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">Sent
by:        </span><span style=" font-size:9pt;font-family:sans-serif">"users"
<users-bounces@rtems.org></span>
<br>
<hr noshade>
<br>
<br>
<br><tt><span style=" font-size:10pt">Lower numbers indicate higher priority.
 Init defaults to the highest<br>
priority 1 if you don't override CONFIGURE_INIT_TASK_PRIORITY.<br>
<br>
You are using events. Probably, the print statement comes after the<br>
event send in your task, and the event send is causing the task to<br>
self-suspend.  That's my best guess. (Although, you should get<br>
something different if disabling preemption.)<br>
<br>
If Init task is lower priority, then you should expect to get this instead:<br>
<br>
The expected result:<br>
[TASK 0] Starting...<br>
[TASK 0] Computed the correct floating point result.<br>
[TASK 1] Starting...<br>
[TASK 1] Computed the correct integer result.<br>
[TASK 2] Starting...<br>
[TASK 2] Computed the correct floating point result.<br>
[TASK 3] Starting...<br>
[TASK 3] Computed the correct integer result.<br>
[MAIN] Waiting for testing tasks to complete...<br>
[MAIN] All testing tasks completed.<br>
<br>
-Gedare<br>
<br>
On Thu, Apr 30, 2020 at 9:30 AM Fernando Domínguez Pousa<br>
<fdpousa@gmv.com> wrote:<br>
><br>
> Yes, of course!<br>
><br>
><br>
><br>
> The Init function<br>
><br>
><br>
><br>
> rtems_task Init(rtems_task_argument argument)<br>
><br>
> {<br>
><br>
>     rtems_status_code status;<br>
><br>
>     rtems_name Task_name[TASKS]; /* task names */<br>
><br>
>     rtems_id Task_id[TASKS]; /* task ids */<br>
><br>
>     int i;<br>
><br>
><br>
><br>
>     all_OK = 1;<br>
><br>
>     g_init_task_id = rtems_task_self();<br>
><br>
>     for(i = 0; i < TASKS; i++)<br>
><br>
>     {<br>
><br>
>         // Initialize Task name<br>
><br>
>         Task_name[i] = rtems_build_name('T', 'T',
"0" + i / 10, "0" + i % 10);<br>
><br>
><br>
><br>
>         // Create Task<br>
><br>
>         status = rtems_task_create(<br>
><br>
>             Task_name[i],<br>
><br>
>             (rtems_task_priority) 2,<br>
><br>
>             RTEMS_MINIMUM_STACK_SIZE,<br>
><br>
>             RTEMS_DEFAULT_MODES,<br>
><br>
>             (i%2) == 0 ? RTEMS_FLOATING_POINT
: RTEMS_DEFAULT_ATTRIBUTES,<br>
><br>
>             &Task_id[i]);<br>
><br>
>                 if (status
!= RTEMS_SUCCESSFUL) {<br>
><br>
>                    
printf(<br>
><br>
>                 "[MAIN]
Failed to rtems_task_create... status:%0x\n",<br>
><br>
>                 status);<br>
><br>
>             rtems_task_delete(RTEMS_SELF);<br>
><br>
>                 }<br>
><br>
><br>
><br>
>         // Start Task<br>
><br>
>         status = rtems_task_start(<br>
><br>
>             Task_id[i],<br>
><br>
>             (i%2) == 0 ? Task1_EntryPoint
: Task2_EntryPoint,<br>
><br>
>             i);<br>
><br>
>     }<br>
><br>
>     // To give coverage code the opportunity to work, wait
for children tasks<br>
><br>
>     // to die first. RTEMS events are used for synchronization.<br>
><br>
>     {<br>
><br>
>         printf("[MAIN] Waiting for testing
tasks to complete...\n");<br>
><br>
>         rtems_option options = (RTEMS_EVENT_ANY
| RTEMS_WAIT);<br>
><br>
>         rtems_event_set in = 0;<br>
><br>
>         for (i=0; i<TASKS; i++)<br>
><br>
>             in |= (RTEMS_EVENT_0 <<
i);<br>
><br>
>         rtems_event_set out;<br>
><br>
>         rtems_event_set non_completed = in;<br>
><br>
>         while (non_completed) {<br>
><br>
>             status = rtems_event_receive(in,
options, RTEMS_NO_TIMEOUT, &out);<br>
><br>
>             if ( status == RTEMS_SUCCESSFUL
) {<br>
><br>
>                 non_completed
&= ~out;<br>
><br>
>                 printf("[MAIN]
Task completed.\n");<br>
><br>
>                 fflush(stdout);<br>
><br>
>             }<br>
><br>
>         }<br>
><br>
>         printf("[MAIN] All testing tasks
completed.\n");<br>
><br>
>         if (!all_OK)<br>
><br>
>             printf("[MAIN] Some
tests failed... :-(\n");<br>
><br>
>         else<br>
><br>
>             printf("[MAIN] All
tests passed! :-)\n");<br>
><br>
>         fflush(stdout);<br>
><br>
>     }<br>
><br>
>     exit(0);<br>
><br>
> }<br>
><br>
><br>
><br>
> The system.h flags:<br>
><br>
><br>
><br>
> // Comment this to skip memory checks at startup<br>
><br>
> #include <rtems.h><br>
><br>
><br>
><br>
> rtems_task Init(rtems_task_argument argument);<br>
><br>
> rtems_task Task1_EntryPoint(rtems_task_argument argument);<br>
><br>
> rtems_task Task2_EntryPoint(rtems_task_argument argument);<br>
><br>
> void task_begin(int task_no);<br>
><br>
> void task_end(int task_no);<br>
><br>
> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER<br>
><br>
> #define CONFIGURE_MAXIMUM_TASKS          
64<br>
><br>
> #define CONFIGURE_TICKS_PER_TIMESLICE     100<br>
><br>
> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE<br>
><br>
> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER<br>
><br>
><br>
><br>
> #define CONFIGURE_MAXIMUM_PROCESSORS  1<br>
><br>
><br>
><br>
> #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT<br>
><br>
> #ifndef DEFINE_VARS<br>
><br>
> #define GLOBAL<br>
><br>
> #else<br>
><br>
> #define GLOBAL extern<br>
><br>
> #endif<br>
><br>
><br>
><br>
> GLOBAL rtems_id g_init_task_id;<br>
><br>
> GLOBAL int all_OK;<br>
><br>
><br>
><br>
> #include <rtems/confdefs.h><br>
><br>
><br>
><br>
><br>
><br>
> Regards,<br>
><br>
><br>
><br>
> From: Joel Sherrill [</span></tt><a href=mailto:joel@rtems.org><tt><span style=" font-size:10pt">mailto:joel@rtems.org</span></tt></a><tt><span style=" font-size:10pt">]<br>
> Sent: 30 April 2020 17:25<br>
> To: Fernando Domínguez Pousa <fdpousa@gmv.com><br>
> Cc: rtems-users@rtems.org <users@rtems.org><br>
> Subject: Re: RTEMS tasks timesliced instead of running to completion.
TIMESLICE flag is not active!<br>
><br>
><br>
><br>
><br>
><br>
> On Thu, Apr 30, 2020, 10:14 AM Fernando Domínguez Pousa <fdpousa@gmv.com>
wrote:<br>
><br>
> Hello,<br>
><br>
><br>
><br>
> I am executing a program which executes four different task with testing
operations. These tasks were created and launched in this way:<br>
><br>
><br>
><br>
> status = rtems_task_create(Task_name[i], (rtems_task_priority) 2,
RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES,<br>
><br>
>             (i%2) == 0 ? RTEMS_FLOATING_POINT
: RTEMS_DEFAULT_ATTRIBUTES, &Task_id[i]);<br>
><br>
><br>
><br>
> status = rtems_task_start(Task_id[i], (i%2) == 0 ? Task1_EntryPoint
: Task2_EntryPoint, i);<br>
><br>
><br>
><br>
> As you can see all task are created with the same priority, and launched
one after the other inside a for loop. They are configured in default modes,
so time slicing is disabled by default  (all mode bits are 0). This
result would be expected due to each task would run-to-completion because
all tasks have the same priority:<br>
><br>
><br>
><br>
> The expected result:<br>
><br>
> [MAIN] Waiting for testing tasks to complete...<br>
><br>
> [TASK 0] Starting...<br>
><br>
> [TASK 0] Computed the correct floating point result.<br>
><br>
> [TASK 1] Starting...<br>
><br>
> [TASK 1] Computed the correct integer result.<br>
><br>
> [TASK 2] Starting...<br>
><br>
> [TASK 2] Computed the correct floating point result.<br>
><br>
> [TASK 3] Starting...<br>
><br>
> [TASK 3] Computed the correct integer result.<br>
><br>
> [MAIN] All testing tasks completed.<br>
><br>
><br>
><br>
> Nevertheless, using RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_MODES | RTEMS_TIMESLICE
or RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT either as rtems_mode, the result
is always the same.<br>
><br>
><br>
><br>
> The actual result:<br>
><br>
> [MAIN] Waiting for testing tasks to complete...<br>
><br>
> [TASK 0] Starting...<br>
><br>
> [TASK 1] Starting...<br>
><br>
> [TASK 2] Starting...<br>
><br>
> [TASK 3] Starting...<br>
><br>
> [TASK 0] Computed the correct floating point result.<br>
><br>
> [TASK 1] Computed the correct integer result.<br>
><br>
> [TASK 2] Computed the correct floating point result.<br>
><br>
> [TASK 3] Computed the correct integer result.<br>
><br>
> [MAIN] All testing tasks completed.<br>
><br>
><br>
><br>
> At RTEMS API Guide:<br>
><br>
><br>
><br>
> The timeslicing component is used by the RTEMS scheduler to determine
how the processor is allocated to tasks of equal priority. If timeslicing
is enabled (RTEMS_TIMESLICE), then RTEMS will limit the amount of time
the task can execute before the processor is allocated to another ready
task of equal priority.<br>
><br>
><br>
><br>
> The length of the timeslice is application dependent and specified
in the Configuration Table. If timeslicing is disabled (RTEMS_NO_TIMESLICE),
then the task will be allowed to execute until a task of higher priority
is made ready. However I have not any task with higher priority, Init task
priority is lower.<br>
><br>
><br>
><br>
> If RTEMS_NO_PREEMPT is selected, then the timeslicing component is
ignored by the scheduler.<br>
><br>
><br>
><br>
> How can I execute this tasks in a run to completion fashion for same
priority tasks? Task 0 starts and ends, then Task1 starts and ends… etc,<br>
><br>
><br>
><br>
> There are many things that could be happening. Can you post the program?<br>
><br>
><br>
><br>
> Regards,<br>
><br>
><br>
><br>
> Fer.<br>
><br>
><br>
><br>
><br>
> P Please consider the environment before printing this e-mail.<br>
><br>
> _______________________________________________<br>
> users mailing list<br>
> users@rtems.org<br>
> </span></tt><a href=http://lists.rtems.org/mailman/listinfo/users><tt><span style=" font-size:10pt">http://lists.rtems.org/mailman/listinfo/users</span></tt></a><tt><span style=" font-size:10pt"><br>
><br>
><br>
> P Please consider the environment before printing this e-mail.<br>
> _______________________________________________<br>
> users mailing list<br>
> users@rtems.org<br>
> </span></tt><a href=http://lists.rtems.org/mailman/listinfo/users><tt><span style=" font-size:10pt">http://lists.rtems.org/mailman/listinfo/users</span></tt></a><tt><span style=" font-size:10pt"><br>
_______________________________________________<br>
users mailing list<br>
users@rtems.org<br>
</span></tt><a href=http://lists.rtems.org/mailman/listinfo/users><tt><span style=" font-size:10pt">http://lists.rtems.org/mailman/listinfo/users</span></tt></a>
<br>
<br> <PRE>This message is intended only for the recipient(s) named above. It may contain proprietary information and/or
protected content. Any unauthorised disclosure, use, retention or dissemination is prohibited. If you have received
this e-mail in error, please notify the sender immediately. ESA applies appropriate organisational measures to protect
personal data, in case of data privacy queries, please contact the ESA Data Protection Officer (dpo@esa.int).
</PRE>