Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перенаправить printf
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
doom13
Приветствую. Необходимо перенаправить вывод printf.
Для Техасовского компилятора было достаточно переопределить fputc, fputs и всё работало:
Код
// c:\ti\ccsv5\tools\compiler\arm_5.1.1\include\stdio.h
extern _CODE_ACCESS int     fputc(int _c, register FILE *_fp);
extern _CODE_ACCESS int     fputs(const char *_ptr, register FILE *_fp);

// user_interface.cpp
int std::fputc(int _c, register FILE *_fp) {
           ...
           return 1;
}

int std::fputs(const char *_ptr, register FILE *_fp) {
            ...
            return 1;
}

Для GNU ARM + eclipse выдаёт ошибку, stdio.h для ARM Toolchain отличается от Техасовского
Код
// c:\ARM\GNU Tools ARM Embedded\4.9 2014q4\arm-none-eabi\include\stdio.h
int    _EXFUN(fputc, (int, FILE *));
int    _EXFUN(fputs, (const char *__restrict, FILE *__restrict));

Спасибо.

Такая версия компилится, но вывод printf работает в консоль.
Код
// user_interface.cpp
int fputc(int _c, register FILE *_fp) {
    ...
    return 1;
}

int fputs(const char *_ptr, register FILE *_fp) {
    ...
    return 1;
}
doom13
Проблема решилась. Нужно было смотреть в сторону _write(), плюс в моём случае добавить extern "C".
Код
// user_interface.cpp
#ifdef __cplusplus
extern "C" {
#endif

ssize_t _write (int fd, const char* buf, size_t nbyte);

ssize_t _write (int fd __attribute__((unused)), const char* buf __attribute__((unused)), size_t nbyte __attribute__((unused))) {
    ...
    return 1;
}

#ifdef __cplusplus
}
#endif
KostyantynT
Цитата(doom13 @ Mar 14 2015, 19:31) *
Проблема решилась. Нужно было смотреть в сторону _write(), плюс в моём случае добавить extern "C".
Код
// user_interface.cpp
#ifdef __cplusplus
extern "C" {
#endif

ssize_t _write (int fd, const char* buf, size_t nbyte);

ssize_t _write (int fd __attribute__((unused)), const char* buf __attribute__((unused)), size_t nbyte __attribute__((unused))) {
    ...
    return 1;
}

#ifdef __cplusplus
}
#endif


Спасибо!. Плюс - ключевое слово semihosting. http://eclipse.dzone.com/articles/semihost...nu-arm-embedded
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.