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

Функция с переменным числом параметров

Пытаюсь сделать вариант свой 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);

то все в порядке, не могу понять в чем ошибка

 

 

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


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

11 minutes ago, inventor said:

не могу понять в чем ошибка

Ваш xprintf не может принять на входе va_list, для этого в библиотеке есть семейство функций vprintf, vsprintf, vsnprintf и т.п.

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


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

12 minutes ago, aaarrr said:

Ваш xprintf не может принять на входе va_list, для этого в библиотеке есть семейство функций vprintf, vsprintf, vsnprintf и т.п.

не понял, что мне нужно поменять?

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


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

xprintf на что-то принимающее va_list на входе. Нельзя va_list скормить printf'у, только vprintf'у.

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


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

Как альтернатива можно Ваш log_printf написать в виде макроопределения. У меня сделано так, можете добавить в него свой семафор.

Так же нужно подключить хидер с гитхаба: https://github.com/willwray/VA_OPT

#define DEBUG_PRINTF(use, fmt, ...)						do {if(use != 0U) printf(fmt, ##__VA_ARGS__);} while(0U)

Возможно не будет работать на всех компиляторах.

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


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

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

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

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

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

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

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

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

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

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