реклама на сайте
подробности

 
 
> использование TLS в IAR
SMRM
сообщение Mar 5 2015, 21:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 26-06-09
Пользователь №: 50 667



Здравствуйте, Уважаемые Коллеги!
Пишу проект на 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] - для короткого
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016