Jump to content

    
Sign in to follow this  
inventor

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

Recommended Posts

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

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

 

 

Share this post


Link to post
Share on other sites
11 minutes ago, inventor said:

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

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

Share this post


Link to post
Share on other sites
12 minutes ago, aaarrr said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this