Sherk Chung wrote:
> We are using Xenomai on an AT91 ARM board. We wrote a program that
> creates multiple Xenomai tasks, which use rt_mutexes to when accessing
> some shared global variables. The rt_mutexes used are declared
> globally, as in the example below. Since the objects sharedVar1,
> shredVar2, etc. are declared on the global stack, the rt_mutexes are
> created prior to main() getting executed. The problem we are having is
> that our program is causing our HW to freeze up on program load, it
> never gets to the first line of main(), and our HW supplier pointed out
> that we must call mlockall() and the set up the signal handlers before
> creating the mutexes.
>
>
>
> Is there a problem with creating rt_mutexes the way we are doing, and
> should that cause the ARM board to freeze? (the same program loads fine
> on an x86)
Hi,
your test program does not compile, next time, please provide a
self-contained test which I only have to compile in order to be able to
run it. I compiled and ran the following program:
#include <native/queue.h>
#include <native/mutex.h>
#include <signal.h>
#include <sys/mman.h>
template <class T>
class SyncObject {
private:
RT_MUTEX mutex;
public:
T value;
SyncObject(const char* desc)
{
printf("mutex_create !\n");
rt_mutex_create(&mutex, desc);
}
~SyncObject()
{
rt_mutex_delete(&mutex);
}
void lock()
void unlock()
{
rt_mutex_release(&mutex);
}
} ;
SyncObject<int> g_sharedVar1 = "var1";
SyncObject<int> g_sharedVar2 = "var2";
SyncObject<int> g_sharedVar3 = "var3";
extern "C" int main(void)
{
printf ("Starting execution of main"); // Program crashes before
mlockall(MCL_CURRENT | MCL_FUTURE);
return 0;
}
And it runs just fine. So, I need more details, such as your kernel
configuration.
--
Gilles.
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help