Народ, помогите все по полкам разложить.
Все началось с того, что хотел прикрутить *printf из newlib. В проекте используется FreeRTOS.
По прошлому опыту ожидал, что сразу возникнут ошибки линковки _sbrk ,_write, _read и т.д.
Но все скомпилировалось нормально

. ToolChain от klen'а (спасибо ему)
При запуске из под отладчика выпал в _
swiwrite на инструкции
bkpt. Копаясь в исходниках newlib 1.19 нашел где это.
Правильно ли я понял, что это из-за сборки newlib без ключа
--disable-newlib-supplied-syscalls?
Дальше я скачал
yagarto, заменил компилятор. и ошибки линковки возникли (я впервые был ряд ошибкам

)))
Реализовал 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 черевато

(и malloc тоже)
собственно вопросы:
- можно ли заставить ToolChain klen'a работать с моими syscalls без пересборки newlib
- как залочить кучу newlib в проекте FreeRTOS (пересобирать что-ли без __SINGLE_THREAD__)
- если прошлое нельзя, то может наоборот заставить newlib использовать vPortMalloc из FreeRTOS
За любую помощь заранее благодарен!