zoukankan      html  css  js  c++  java
  • stdarg宏与实现stm32printf串口打印

    stdarg宏与实现stm32printf串口打印

    stdarg宏

    包括

    一个数据类型:va_list

    三个宏:va_start、va_arg、va_end

    /* 函数用于计算平均数 
       n_values:表示总共几个数
       ...:表示需要计算的数
    */
    float average(int n_values, ...)
    {
        int sum = 0;
        
        va_list arg;	
        
        /* 第一个参数是va_list变量,
        第二个是可变参数的前一个参数 。
        初始化过程,会把arg变量设置为
        指向可变参数部分(也就是 ... 部分)第一个输入参数
        arg可看作参数列表 */
        va_start(arg, n_values)
        
        for(int i = 0; i < n_values; i++)
        {
            /* va_arg会接收两个参数,va_list变量
            和参数列表中下一个参数的类型。
            va_arg返回这个参数的值,并使arg指向
            下一个可变参数 */
        	sum += va_arg(arg,int);    
        }
        
        /* 可变参数访问完毕后,释放arg */
        va_end(arg);
        
        return sum / n_values;
    }
    

    实现串口打印

    void vprint(const char *fmt, va_list argp)
    {
        unsigned char string[200];
        if(0 < vsprintf(string,fmt,argp)) // build string
        {
            HAL_UART_Transmit(&huart1, string, strlen(string), 0xffffff); // send message via UART
        }
    }
    
    void u_print(const char *fmt, ...) // custom printf() function
    {
        va_list argp;
        va_start(argp, fmt);
        vprint(fmt, argp);
        va_end(argp);
    }
    
    /* 正常情况下返回生成字串的长度
       把参数 param 按照 *format 指定的格式 写到 *string */
    int vsprintf(char *string, char *format, va_list param);
    
  • 相关阅读:
    iOS面试题总结整理(附答案)
    iOS App上传项目遇到的问题
    Could not find Developer Disk Image
    xcode下载方式
    iOS App上架流程(2016详细版)
    Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
    iOS开发之17个常用代码整理
    iOS求职之OC面试题
    Android xmpp 连接基本方法
    Ubuntu安装过程
  • 原文地址:https://www.cnblogs.com/juzhango/p/14493282.html
Copyright © 2011-2022 走看看