inventor 0 17 августа, 2021 Опубликовано 17 августа, 2021 · Жалоба Пытаюсь сделать вариант свой printf на терминал void log_printf(const char* tag, char* fmt,...) { // xSemaphoreTake(log_mtx, portMAX_DELAY); va_list arp; va_start(arp, fmt); xprintf(fmt, arp); va_end(arp); вызываю: log_printf("main", "i = %04X\n", i); выводит какой то мусор: i =2004аас8 если вызываю xprintf(i = %04X\n", i); то все в порядке, не могу понять в чем ошибка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 17 августа, 2021 Опубликовано 17 августа, 2021 · Жалоба 11 minutes ago, inventor said: не могу понять в чем ошибка Ваш xprintf не может принять на входе va_list, для этого в библиотеке есть семейство функций vprintf, vsprintf, vsnprintf и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 17 августа, 2021 Опубликовано 17 августа, 2021 · Жалоба 12 minutes ago, aaarrr said: Ваш xprintf не может принять на входе va_list, для этого в библиотеке есть семейство функций vprintf, vsprintf, vsnprintf и т.п. не понял, что мне нужно поменять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 17 августа, 2021 Опубликовано 17 августа, 2021 · Жалоба xprintf на что-то принимающее va_list на входе. Нельзя va_list скормить printf'у, только vprintf'у. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 17 августа, 2021 Опубликовано 17 августа, 2021 · Жалоба да, понял, тупанул ищу функцию которая работает как vfsprintf() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Neo_Matrix 0 29 августа, 2021 Опубликовано 29 августа, 2021 · Жалоба Как альтернатива можно Ваш log_printf написать в виде макроопределения. У меня сделано так, можете добавить в него свой семафор. Так же нужно подключить хидер с гитхаба: https://github.com/willwray/VA_OPT #define DEBUG_PRINTF(use, fmt, ...) do {if(use != 0U) printf(fmt, ##__VA_ARGS__);} while(0U) Возможно не будет работать на всех компиляторах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться