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

 
 
> newlib + malloc lock, Помогите разобраться
podelkin
сообщение Oct 24 2011, 10:37
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 24-10-11
Пользователь №: 67 911



Народ, помогите все по полкам разложить.
Все началось с того, что хотел прикрутить *printf из newlib. В проекте используется FreeRTOS.
По прошлому опыту ожидал, что сразу возникнут ошибки линковки _sbrk ,_write, _read и т.д.
Но все скомпилировалось нормально cranky.gif . ToolChain от klen'а (спасибо ему)
При запуске из под отладчика выпал в _swiwrite на инструкции bkpt. Копаясь в исходниках newlib 1.19 нашел где это.
Правильно ли я понял, что это из-за сборки newlib без ключа --disable-newlib-supplied-syscalls?
Дальше я скачал yagarto, заменил компилятор. и ошибки линковки возникли (я впервые был ряд ошибкам biggrin.gif )))
Реализовал syscalls, и все заработало.
Но!!! printf использует malloc, malloc вызывает _sbrk для получения памяти. в исходниках для блокировки кучи используется
вызовы _malloc_lock и _malloc_unlock. Отладчиком смотрел, они пустые (и в исходнике newlib их смотрел)

Код
void
__malloc_lock (ptr)
     struct _reent *ptr;
{
#ifndef __SINGLE_THREAD__
  __lock_acquire_recursive (__malloc_lock_object);
#endif
}


Значит из многопоточной среды вызывать printf черевато crying.gif (и malloc тоже)
собственно вопросы:
  1. можно ли заставить ToolChain klen'a работать с моими syscalls без пересборки newlib
  2. как залочить кучу newlib в проекте FreeRTOS (пересобирать что-ли без __SINGLE_THREAD__)
  3. если прошлое нельзя, то может наоборот заставить newlib использовать vPortMalloc из FreeRTOS


За любую помощь заранее благодарен!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th July 2025 - 00:49
Рейтинг@Mail.ru


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