DEBUG---printf-----函数传参不确定数目【st-dialog】

博客介绍了ST25官方代码的来源路径,补充了相关代码,通过修改两个地方来打开debug模式,给出了不同调试宏定义在DEBUG_MODE开启和关闭时的不同实现,最后进行了小结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:ST25官方代码printf

C:\Desktop\en.ST25R3911_Discovery_FW\ST25R3911B_DISCO_FW_v1_2_8\common\STM32\Src

#include "logger.h"
#include "st_errno.h"
#include <string.h>
#include <stdarg.h>
#include <stdio.h>

int logUsart(const char* format, ...)
{
    #define LOG_BUFFER_SIZE 256
    char buf[LOG_BUFFER_SIZE];
    va_list argptr;
    va_start(argptr, format);
    int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr);
    va_end(argptr);  
      
    /* */
    logUsartTx((uint8_t*)buf, strlen(buf));
    return cnt;
 
}


#define USART_TIMEOUT          1000
UART_HandleTypeDef *pLogUsart = 0;

void logUsartInit(UART_HandleTypeDef *husart)
{
    pLogUsart = husart;
}

uint8_t logUsartTx(uint8_t *data, uint16_t dataLen)
{
  if(pLogUsart == 0)
    return ERR_INVALID_HANDLE;
   return HAL_UART_Transmit(pLogUsart, data, dataLen, USART_TIMEOUT);

}

++++++补充dialog我们的代码++++++++++++

#define DEBUG_MODE                      1              -------------------------

//#define CFG_PRINTF                                    --------------------------
#ifdef CFG_PRINTF
    #define CFG_PRINTF_UART2
#endif

修改上面2个地方 打开debug


#if DEBUG_MODE


#define SHOWME mc_debug("\r\n\r\n[ %s------%d ]\r\n\r\n",__FUNCTION__,__LINE__)
#define mc_debug(...)       do {                                            \
                            mcube_printf(__VA_ARGS__);                      \
                            } while (0);
#define mc_debug_num(dec)   do {                                            \
                            mcube_num_printf(dec);                          \
                            } while (0);
#define mc_debug_byte(ch) do {                                            \
                            mcube_ch_printf(ch);                            \
                            } while (0);
#define mc_debug_4hex(hex)                                              \
                            do {                                            \
                            mcube_4hex_printf(hex);                         \
                            } while (0);
#else
#define mc_debug(...)
#define mc_debug_num(...)
#define mc_debug_byte(...)
#define mc_debug_4hex(...)
#endif

int logUsart(const char* format, ...)
{
    #define LOG_BUFFER_SIZE 256
    char buf[LOG_BUFFER_SIZE];
    va_list argptr;
    va_start(argptr, format);
    int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr);
    va_end(argptr);  
      
    /* */
    //logUsartTx((uint8_t*)buf, strlen(buf));
    uart_send(UART2, (uint8_t *) buf, strlen(buf), UART_OP_BLOCKING);
    return cnt;
 
}
void mcube_printf(char *format, ...)
{
//  String only!!
#if defined (CFG_PRINTF_UART2)
   // printf_string(UART2, format);
  //  https://blog.youkuaiyun.com/weixin_42381351/article/details/89736990?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162035486116780271561289%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162035486116780271561289&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-89736990.pc_search_result_hbase_insert&utm_term=printf+gkoson
    logUsart(format);
#endif
}

小结

当前代码

#define mc_debug(...)       do {                                            \
                            mcube_printf(__VA_ARGS__);                      \
                            } while (0);
                            
                            
void mcube_printf(char *format, ...)
{
//  String only!!
#if defined (CFG_PRINTF_UART2)
    printf_string(UART2, format);
#endif
}


测试效果是:
 mc_debug("\r\n3------------------------m_ble_rx_tx_ntf_cfg_ind_hndl[%d ble_mode]",_ble_mode);
 
 3------------------------m_ble_rx_tx_ntf_cfg_ind_hndl[%d ble_mode] 

没有完成正常的printf




修改:
 #if 0
void mcube_printf(char *format, ...)
{
//  String only!!
#if defined (CFG_PRINTF_UART2)
    printf_string(UART2, format);
#endif
}
#else
int logUsart(const char* format, ...)
{
    #define LOG_BUFFER_SIZE 256
    char buf[LOG_BUFFER_SIZE];
    va_list argptr;
    va_start(argptr, format);
    int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr);
    va_end(argptr);  
      
    /* */
    //logUsartTx((uint8_t*)buf, strlen(buf));
    uart_send(UART2, (uint8_t *) buf, strlen(buf), UART_OP_BLOCKING);
    return cnt;
 
}

void mcube_printf(char *format, ...)
{
//  String only!!
#if defined (CFG_PRINTF_UART2)
   // printf_string(UART2, format);
  //  https://blog.youkuaiyun.com/weixin_42381351/article/details/89736990?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162035486116780271561289%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162035486116780271561289&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-89736990.pc_search_result_hbase_insert&utm_term=printf+gkoson
    logUsart(format);
#endif
}
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值