Alex_Golubev 0 19 октября, 2020 Опубликовано 19 октября, 2020 · Жалоба Использую stm32cubemx. Добавил функцию "int putchar(int c)". Когда вызываешь printf не происходит вызова putchar с передачей символа. Может кто знает в чем дело, в iar просто добавил и все работает а тут нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 19 октября, 2020 Опубликовано 19 октября, 2020 · Жалоба 2 minutes ago, Alex_Golubev said: Использую stm32cubemx. Добавил функцию "int putchar(int c)". Когда вызываешь printf не происходит вызова putchar с передачей символа. Может кто знает в чем дело, в iar просто добавил и все работает а тут нет. в GCC для ARM putchar вызывается из _write. Вам еще свою _write надо написать. syscalls.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 19 октября, 2020 Опубликовано 19 октября, 2020 · Жалоба В смысли вот так сделать: Скрытый текст int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { putchar(*ptr++); } return len; } ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 19 октября, 2020 Опубликовано 19 октября, 2020 · Жалоба 36 minutes ago, Alex_Golubev said: В смысли вот так сделать: Да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба Почему-то даже функция "__attribute__((weak)) int _write(int file, char *ptr, int len)" не вызывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба Нужно что то прописать в ликовщик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 21 minutes ago, Alex_Golubev said: Нужно что то прописать в ликовщик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 20 октября, 2020 Опубликовано 20 октября, 2020 (изменено) · Жалоба Как понял нужно добавить следующие в настройки Properties ---> c/c++ Build ---> Settings ---> Linker ---> Libraries ---> rdimon и Properties ---> c/c++ Build ---> Settings ---> Linker ---> Miscellaneous ---> -specs=rdimon.specs Сделал получил ошибки при сборки вида: /Src/syscalls.c:49: first defined here и так ругается на функции initialise_monitor_handles int _close(int file) int _isatty(int file) int _unlink(char *name) int _times(struct tms *buf) Изменено 20 октября, 2020 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба Попробовал вот так, тоже не помогло. Добавил в main: #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE { return ch; } при добавление Linker->Libraries->Small printf линкер ругает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 25 октября, 2020 Опубликовано 25 октября, 2020 · Жалоба Чтобы вызвалась функция _write нужно добавить в printf() '\n'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться