"Странная работа" функции printf()

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

Ответить
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

"Странная работа" функции printf()

Сообщение durimar_13 »

Здравствуйте!
Давно заметил некоторые странности в срабатывании функции printf().
По совету Александра Д не использую функцию printf() из retarget.
В некоторых случаях вывод функция делает после того, как отработают какие-нибудь другие.
Вот пример:

printf("\n\rПолучено сообщение: "); // выводится после fill_UBUFF(), и что это такое?
// Ожидаю вывод: Получено сообщение:, но его нет!
fill_UBUFF(); // ЖДЕМ и принимаем символьную строку в UBUFF от UART0
printf("%s\r\n",UBUFF); // ввожу через консоль 100000
// Теперь оба вывода здесь
Получено сообщение: 100000
Может я что-то делаю не правильно?
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: "Странная работа" функции printf()

Сообщение RabidRabbit »

По классике printf() - это буферированный вывод. Наружу улетает либо при заполнении буфера, либо после символа LF (\n).
Если желаете видеть вывод без \n в хвосте, делайте fflush(stdout) после printf()
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: "Странная работа" функции printf()

Сообщение durimar_13 »

Спасибо!
"Как хорошо быть опытным сталкером. И оружия с собой много таскать не надо."(c)
А то я думал, чего это она себя так ведет: то сразу выводит, то не сразу. После Вашего ответа пригляделся к коду - точно! Не везде есть \n!
С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: "Странная работа" функции printf()

Сообщение durimar_13 »

А вот кто такой fflush(stdout) компилятор не занет :(
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: "Странная работа" функции printf()

Сообщение RabidRabbit »

durimar_13 писал(а): 10 авг 2026, 09:57 А вот кто такой fflush(stdout) компилятор не занет :(
Отсюда по-моему два пути:
1. Использовать "printf() из retarget"
2. Использовать xprintf()

На мой взгляд, второй вариант лучше.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: "Странная работа" функции printf()

Сообщение durimar_13 »

За ссылку спасибо. Библиотеку качнул.
Но пока не воспользуюсь.
Для вывода в WebGUI текущая print() меня устраивает. :D
С уважением, Виктор.
Аватара пользователя
ejsan
Сообщения: 115
Зарегистрирован: 15 авг 2022, 21:17
Предприятие: vbrspb.ru

Re: "Странная работа" функции printf()

Сообщение ejsan »

Это у нас что за контроллер, K1921ВГ015? Если да, то и для xprintf не забывайте про известные приколы со float-ами, они там вылезут! Для себя я кардинально решил эту проблему при помощи кривого, но рабочего самосбора пропатченного GCC. :roll:
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: "Странная работа" функции printf()

Сообщение RabidRabbit »

ejsan писал(а): 10 авг 2026, 14:13 Если да, то и для xprintf не забывайте про известные приколы со float-ами, они там вылезут!
Тут про ВГ1Т.
Да и в ВГ015 нет в xprintf "приколов с float-ами", так там везде double используется, соответственно все действия софтовые, так как ВГ015 в double железячно не умеет, а все значения float при передаче в функцию с переменным числом входных параметров будут преобразованы в double.
ea
Администратор
Сообщения: 136
Зарегистрирован: 10 окт 2014, 09:08

Re: "Странная работа" функции printf()

Сообщение ea »

durimar_13 писал(а): 08 авг 2026, 21:02 Здравствуйте!
Давно заметил некоторые странности в срабатывании функции printf().
По совету Александра Д не использую функцию printf() из retarget.
В некоторых случаях вывод функция делает после того, как отработают какие-нибудь другие.
Вот пример:

printf("\n\rПолучено сообщение: "); // выводится после fill_UBUFF(), и что это такое?
// Ожидаю вывод: Получено сообщение:, но его нет!
fill_UBUFF(); // ЖДЕМ и принимаем символьную строку в UBUFF от UART0
printf("%s\r\n",UBUFF); // ввожу через консоль 100000
// Теперь оба вывода здесь
Получено сообщение: 100000
Может я что-то делаю не правильно?

Добрый день.
По данному вопросу не хватает деталей.
По какому микроконтроллеру вопрос?
Какая макетно-отладочная плата используется?
Какой пример задействован? или пришлите проект в котором наблюдается данное поведение с файлами настройки проекта.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: "Странная работа" функции printf()

Сообщение durimar_13 »

ea писал(а): 20 авг 2026, 12:07
durimar_13 писал(а): 08 авг 2026, 21:02 Здравствуйте!
Давно заметил некоторые странности в срабатывании функции printf().
...........
Может я что-то делаю не правильно?

Добрый день.
По данному вопросу не хватает деталей.
По какому микроконтроллеру вопрос?
Какая макетно-отладочная плата используется?
Какой пример задействован? или пришлите проект в котором наблюдается данное поведение с файлами настройки проекта.
МК К1921ВГ1Т, МОП КФДЛ.441461_050
Уже не актуально.
С уважением, Виктор.
Ответить

Вернуться в «32-разрядные микроконтроллеры»