Для Техасовского компилятора было достаточно переопределить 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;
}
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));
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;
}
int fputc(int _c, register FILE *_fp) {
...
return 1;
}
int fputs(const char *_ptr, register FILE *_fp) {
...
return 1;
}