"Странная работа" функции printf()
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
"Странная работа" функции printf()
Здравствуйте!
Давно заметил некоторые странности в срабатывании функции printf().
По совету Александра Д не использую функцию printf() из retarget.
В некоторых случаях вывод функция делает после того, как отработают какие-нибудь другие.
Вот пример:
printf("\n\rПолучено сообщение: "); // выводится после fill_UBUFF(), и что это такое?
// Ожидаю вывод: Получено сообщение:, но его нет!
fill_UBUFF(); // ЖДЕМ и принимаем символьную строку в UBUFF от UART0
printf("%s\r\n",UBUFF); // ввожу через консоль 100000
// Теперь оба вывода здесь
Получено сообщение: 100000
Может я что-то делаю не правильно?
Давно заметил некоторые странности в срабатывании функции 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()
По классике printf() - это буферированный вывод. Наружу улетает либо при заполнении буфера, либо после символа LF (\n).
Если желаете видеть вывод без \n в хвосте, делайте fflush(stdout) после printf()
Если желаете видеть вывод без \n в хвосте, делайте fflush(stdout) после printf()
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: "Странная работа" функции printf()
Спасибо!
"Как хорошо быть опытным сталкером. И оружия с собой много таскать не надо."(c)
А то я думал, чего это она себя так ведет: то сразу выводит, то не сразу. После Вашего ответа пригляделся к коду - точно! Не везде есть \n!
"Как хорошо быть опытным сталкером. И оружия с собой много таскать не надо."(c)
А то я думал, чего это она себя так ведет: то сразу выводит, то не сразу. После Вашего ответа пригляделся к коду - точно! Не везде есть \n!
С уважением, Виктор.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: "Странная работа" функции printf()
А вот кто такой fflush(stdout) компилятор не занет 
С уважением, Виктор.
-
RabidRabbit
- Сообщения: 254
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: "Странная работа" функции printf()
Отсюда по-моему два пути:
1. Использовать "printf() из retarget"
2. Использовать xprintf()
На мой взгляд, второй вариант лучше.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: "Странная работа" функции printf()
За ссылку спасибо. Библиотеку качнул.
Но пока не воспользуюсь.
Для вывода в WebGUI текущая print() меня устраивает.
Но пока не воспользуюсь.
Для вывода в WebGUI текущая print() меня устраивает.
С уважением, Виктор.
Re: "Странная работа" функции printf()
Это у нас что за контроллер, K1921ВГ015? Если да, то и для xprintf не забывайте про известные приколы со float-ами, они там вылезут! Для себя я кардинально решил эту проблему при помощи кривого, но рабочего самосбора пропатченного GCC. 
-
RabidRabbit
- Сообщения: 254
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: "Странная работа" функции printf()
Тут про ВГ1Т.
Да и в ВГ015 нет в xprintf "приколов с float-ами", так там везде double используется, соответственно все действия софтовые, так как ВГ015 в double железячно не умеет, а все значения float при передаче в функцию с переменным числом входных параметров будут преобразованы в double.
Re: "Странная работа" функции printf()
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()
МК К1921ВГ1Т, МОП КФДЛ.441461_050ea писал(а): ↑20 авг 2026, 12:07durimar_13 писал(а): ↑08 авг 2026, 21:02 Здравствуйте!
Давно заметил некоторые странности в срабатывании функции printf().
...........
Может я что-то делаю не правильно?
Добрый день.
По данному вопросу не хватает деталей.
По какому микроконтроллеру вопрос?
Какая макетно-отладочная плата используется?
Какой пример задействован? или пришлите проект в котором наблюдается данное поведение с файлами настройки проекта.
Уже не актуально.
С уважением, Виктор.
