Перейти к содержанию
    

функция printf не вызывает функцию putchar

Использую stm32cubemx. Добавил функцию "int putchar(int c)". Когда вызываешь printf не происходит вызова putchar с передачей символа. Может кто знает в чем дело, в iar просто добавил и все работает а тут нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Alex_Golubev said:

Использую stm32cubemx. Добавил функцию "int putchar(int c)". Когда вызываешь printf не происходит вызова putchar с передачей символа. Может кто знает в чем дело, в iar просто добавил и все работает а тут нет.

в GCC для ARM putchar вызывается из _write.

Вам еще свою _write надо написать.

syscalls.c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В смысли вот так сделать:

Скрытый текст

int _write(int file, char *ptr, int len)
{
	int DataIdx;
	for (DataIdx = 0; DataIdx < len; DataIdx++)
	{
		putchar(*ptr++);
	}
	return len;
}

 

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему-то даже функция "__attribute__((weak)) int _write(int file, char *ptr, int len)"  не вызывается. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как понял нужно добавить следующие в настройки

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)

 

Изменено пользователем Alex_Golubev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал вот так, тоже не помогло. 

Добавил в 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 линкер ругает. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...