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

 
 
 
Reply to this topicStart new topic
> Перенаправить printf
doom13
сообщение Mar 14 2015, 12:55
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую. Необходимо перенаправить вывод 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;
}
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 14 2015, 16:31
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Проблема решилась. Нужно было смотреть в сторону _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
Go to the top of the page
 
+Quote Post
KostyantynT
сообщение Apr 15 2015, 20:09
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 27-06-05
Из: Киев
Пользователь №: 6 345



Цитата(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


--------------------
Если в сердце дверь закрыта - надо в печень постучать..
Go to the top of the page
 
+Quote Post

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

 


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


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