mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #5687 from SenRamakri/sen_MutexErrorFix
Statically allocate ARMCC required mutex objectspull/5723/head
commit
a762e7a622
|
|
@ -423,9 +423,6 @@ void __rt_entry (void) {
|
|||
mbed_start_main();
|
||||
}
|
||||
|
||||
typedef void *mutex;
|
||||
mutex _static_mutexes[OS_MUTEX_NUM] = {NULL};
|
||||
|
||||
/* ARM toolchain requires dynamically created mutexes to enforce thread safety. There's
|
||||
up to 8 static mutexes, protecting atexit, signalinit, stdin, stdout, stderr, stream_list,
|
||||
fp_trap_init and the heap. Additionally for each call to fopen one extra mutex will be
|
||||
|
|
@ -436,6 +433,12 @@ mutex _static_mutexes[OS_MUTEX_NUM] = {NULL};
|
|||
worry about freeing the allocated memory as library mutexes are only freed when the
|
||||
application finishes executing.
|
||||
*/
|
||||
|
||||
typedef void *mutex;
|
||||
#define OS_MUTEX_STATIC_NUM 8
|
||||
mutex _static_mutexes[OS_MUTEX_STATIC_NUM] = {NULL};
|
||||
mbed_rtos_storage_mutex_t _static_mutexes_mem[OS_MUTEX_STATIC_NUM] = {NULL};
|
||||
|
||||
int _mutex_initialize(mutex *m)
|
||||
{
|
||||
osMutexAttr_t attr;
|
||||
|
|
@ -445,10 +448,13 @@ int _mutex_initialize(mutex *m)
|
|||
|
||||
mutex *slot = NULL;
|
||||
core_util_critical_section_enter();
|
||||
for (int i = 0; i < OS_MUTEX_NUM; i++) {
|
||||
for (int i = 0; i < OS_MUTEX_STATIC_NUM; i++) {
|
||||
if (_static_mutexes[i] == NULL) {
|
||||
_static_mutexes[i] = (mutex)-1; // dummy value to reserve slot
|
||||
slot = &_static_mutexes[i];
|
||||
//Use the static attrs
|
||||
attr.cb_size = sizeof(mbed_rtos_storage_mutex_t);
|
||||
attr.cb_mem = &_static_mutexes_mem[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -482,7 +488,7 @@ int _mutex_initialize(mutex *m)
|
|||
void _mutex_free(mutex *m) {
|
||||
mutex *slot = NULL;
|
||||
core_util_critical_section_enter();
|
||||
for (int i = 0; i < OS_MUTEX_NUM; i++) {
|
||||
for (int i = 0; i < OS_MUTEX_STATIC_NUM; i++) {
|
||||
if (_static_mutexes[i] == *m) {
|
||||
slot = &_static_mutexes[i];
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -45,12 +45,6 @@
|
|||
#error "OS Tickrate must be 1000 for system timing"
|
||||
#endif
|
||||
|
||||
#if defined (__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
|
||||
/* ARM toolchain uses up to 8 static mutexes, any further mutexes will be allocated on the heap. */
|
||||
#define OS_MUTEX_OBJ_MEM 1
|
||||
#define OS_MUTEX_NUM 8
|
||||
#endif
|
||||
|
||||
#if !defined(OS_STACK_WATERMARK) && (defined(MBED_STACK_STATS_ENABLED) && MBED_STACK_STATS_ENABLED)
|
||||
#define OS_STACK_WATERMARK 1
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue