Hi - background dev tool info: I'm using CW10.6, MQX 4.1, K70 processor, custom BSP cloned from K70 tower board.
I seem to be having issues when trying to initialize a mutex in my C++ class. I can successfully create a mutex in my main task, however any attempt to create/init a mutex in a C++ class fails and returns !MQX_OK. I tried several examples deom the MQX manuals, and from the forums, but no success. My function (below) is successful if called from main, but unsuccessful if called from my C++ class. I've also tried initializing using a mutex attribute and attribute init:
/***** CODE START *****/
MUTEX_STRUCT_PTR InitMutex()
{
MUTEX_STRUCT newMutex;
// Initialize the mutex
if (_mutex_init(&newMutex, 0) != MQX_OK)
{
printf("Initialize print mutex failed.\n");
_task_block();
}
// Test the new mutex
if (_mutex_lock(&newMutex) == MQX_OK)
{
printf("Mutex lock worked.\n");
}
_mutex_unlock(&newMutex);
return (MUTEX_STRUCT_PTR)&newMutex;
}
/***** CODE END *****/
Then call with
/***** CODE START *****/
MUTEX_STRUCT_PTR m_ptrQueueMutex = InitMutex();
if (m_ptrQueueMutex != NULL)
printf("Got a mutex pointer\n");
/***** CODE END *****/
In main, I get this output:
"Mutex lock worked"
"Got a mutex pointer"
And in my class I get:
"Initialize print mutex failed."
Any help or suggestions will be greatly appreciated.
Solved! Go to Solution.
Is your object a global, with a constructor that is being called before MQX is started perhaps?
Is your object a global, with a constructor that is being called before MQX is started perhaps?
Hi Louie,
I assume that you may be able to reproduce the same project using the default K70 BSP. Am I right? Modifying the BSP should not affect the Kernel behavior.
I ask you this because I need to reproduce this issue on my side with K70 default BSP. Can you confirm this and provide the project where you see this problem? It is ok if you create a simple project just to test this case.
Thanks!
Carlos