SMRM 0 5 марта, 2015 Опубликовано 5 марта, 2015 (изменено) · Жалоба Здравствуйте, Уважаемые Коллеги! Пишу проект на 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. Видимо при инициализации системы необходимо указавать что защищать, но до меня никак не доходит как это сделать. Мне нужно организовать потокобезопастность выделения и освобождения памяти в куче. Может кто-то сталкивался с такой задачей. Заранее благодарю за помощь. Изменено 6 марта, 2015 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба а __iar_system_Mtxinit у вас вызывается при инициализации системы? Можете в отладчике это проследить? И еще, как идея, посмотрите про опцию линкера --threaded_lib Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться