Здравствуйте, Уважаемые Коллеги!
Пишу проект на LPC1769. Среда IAR 7.3. RTOS - uCOS-III.
Использую STL(vector, list, map и auto_ptr). Необходимо обеспечить потоковую безопастность как библиотечных объектов, так и собственных при размещении в куче(вызов new и delete).
Пытаюсь сделать это через System locks interface IAR.
Подключаю к проекту описание
Код
void __iar_system_Mtxinit(__iar_Rmtx *); /* Initialize a systemlock */
void __iar_system_Mtxdst(__iar_Rmtx *);/*Destroy a system lock */
void __iar_system_Mtxlock(__iar_Rmtx *); /* Lock a system lock */
void __iar_system_Mtxunlock(__iar_Rmtx *); /* Unlock a system lock */
сделанное в TLS OS uCOS-III.
Все компилится. При отладке вижу что __iar_system_Mtxlock при создании динамического объекта вызывается, она далее вызывает
Код
void OS_TLS_LockAcquire (void *p_lock)
{
OS_TLS_LOCK *p_tls_lock;
OS_ERR os_err;
if ((p_lock == (void *)0 ) || /* Return if the lock handler is 'NULL' or the ... */
(OSRunning != OS_STATE_OS_RUNNING)) { /* ... kernel is not running. */
return;
}
p_tls_lock = (OS_TLS_LOCK *)p_lock;
OSMutexPend((OS_MUTEX *)&p_tls_lock->Mutex,
(OS_TICK ) 0u,
(OS_OPT ) OS_OPT_PEND_BLOCKING,
(CPU_TS *) 0,
(OS_ERR *)&os_err);
(void)&os_err;
}
но до mutex дело не доходит, так как p_lock = 0 . Соответсвенно защиты нет и как следствие через какое-то время вылет в EXIT.
Видимо при инициализации системы необходимо указавать что защищать, но до меня никак не доходит как это сделать.
Мне нужно организовать потокобезопастность выделения и освобождения памяти в куче.
Может кто-то сталкивался с такой задачей. Заранее благодарю за помощь.
Сообщение отредактировал IgorKossak - Mar 6 2015, 11:31
Причина редактирования: [codebox] для длинного кода, [code] - для короткого