Hello,
We encounter a problem in a particular situation. In the attached
source, when we change the value passed to rt_task_sleep (line 35), the
program never returns.
This appears only with values greater or equal to 100000 (and maybe some
other values between 10000 and 100000) and only when we use
rt_task_sleep between the two rt_task_spawn calls.
Is there something we've done wrong ?
We use and Armadeus APF27 platform. I don't know if this behavior is
related to this architecture, to Xenomai or both.
--
Jonathan ILIAS-PILLET
#include "utils.h"
#include <assert.h>
#include <stdio.h>
#include <native/task.h>
int Compteur1=0;
int Compteur2=0;
volatile int test1=0;
volatile int test2=0;
void WorkingTask1()
{
while(test1==0)
{
Compteur1++;
}
}
void WorkingTask2()
{
while(test2==0)
{
Compteur2++;
}
}
void go ()
{
int erreur;
RT_TASK Rt_Working_task1;
RT_TASK Rt_Working_task2;
rt_task_spawn (&Rt_Working_task1, "WorkingTask1", DEFAULT_STACK_SIZE,10, T_FPU|T_JOINABLE, &WorkingTask1, NULL);
rt_task_sleep(100000); // does not work
//rt_task_sleep(10000); // works
rt_task_spawn (&Rt_Working_task2, "WorkingTask2", DEFAULT_STACK_SIZE, 20, T_FPU|T_JOINABLE, &WorkingTask2, NULL);
test1=1;
test2=1;
}
int main (void)
{
RT_TASK Rt_main_task;
int erreur;
erreur = mlockall( MCL_CURRENT | MCL_FUTURE );
assert (erreur == 0);
erreur = rt_task_spawn (&Rt_main_task, "go", DEFAULT_STACK_SIZE, 50, T_FPU | T_JOINABLE, &go, NULL);
assert (erreur == 0);
erreur = rt_task_join(&Rt_main_task);
assert (erreur == 0);
printf("Fin du programme\r\n");
return 0;
}
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help