Цитата(alx2 @ Nov 3 2010, 08:55)

...перенаправление stdout - это просто присваивание ему другого значения. Может у Вас просто в stdout что-то не то?
Покажите, как Вы открываете поток, что присваиваете stdout...
stdout ничего не присваиваю, т.к. достаточно переопределить низкоуровневые функции, которые Вы уже перечислили, разве нет? При входе в main видно, что stdout уже существует (см. ниже).
Цитата(AHTOXA @ Nov 3 2010, 13:09)

Очень странно. Посмотрите ещё
вот в этой теме, я там приаттачивал тестовый проект с printf. Он для cortex-m3, но может поможет.
Посмотрел, принципиальных отличий не нашел.
Цитата(AHTOXA @ Nov 3 2010, 13:09)

Ещё мысль пришла. Если у вас C++ проект, то функции надо объявлять как extern "C":
Эти функции определены в syscalls.c, всё в порядке.
Да, я забыл упомянуть, что при вызове printf управление всё же передавалось в:
Код
int _fstat_r(struct _reent *r, int file, struct stat *st);
int _isatty_r(struct _reent *r, int file);
Но вместо _write_r затем уходило в __swrite.
Попробовал сейчас перед вызовом printf() руками определить указатель на _write_r():
Код
stdout->_write = reinterpret_cast<typeof(stdout->_write)>(_write_r);
Пока я этого не сделал, stdout->_write указывал на NULL.
Вызвал printf(), смотрю значение stdout->_write - теперь указывает на __swrite.