用可变参数,实现对各种协议函数的打包操作,实现代码简单,便捷配置

 

基本函数

// 任意参数输入模型
/*
输入
输出缓冲区
参数个数
参数列表


地址1/数值0   位宽   地址/数值
  0,1,3,
  1,2,&a,
  1,

*/

//第一个参数定义可变参数个数,用于循环获取变参内容
int MakeBufOut_FromListData(u8* pdatabuf,int dwArgNum, ...)
{
   int Ret = 0;
    int bufLenth = 0;

    va_list pArgs = NULL;
    va_start(pArgs, dwArgNum);
    int dwArgIdx;
 
    for(dwArgIdx = 1; dwArgIdx <= dwArgNum; dwArgIdx++){
        int dwArg_type = va_arg(pArgs, int);
        int dwArg_len =  va_arg(pArgs, int);
        u32 dwArg_AV =   va_arg(pArgs, int);

        if(dwArg_len==0)
        {
            Ret = -3;  //格式错误
            break;
        }
if(dwArg_type==0)
        {
            if(1 == dwArg_len)
            {
                *(u8*)(pdatabuf+bufLenth) = dwArg_AV;
                bufLenth+=1;
            }
            else if(2 == dwArg_len)
            {
                *(u16*)(pdatabuf+bufLenth) = dwArg_AV;
                bufLenth+=2;
            }
            else if(4 == dwArg_len)
            {
                *(u32*)(pdatabuf+bufLenth) = dwArg_AV;
                bufLenth+=4;
            }
            else
            {
                Ret = -2;  //格式错误
                break;
            }
}
        else if(dwArg_type ==1)
        {
            if(dwArg_AV)
            {
                memcpy( pdatabuf+bufLenth, (u8*)dwArg_AV,dwArg_len);
                bufLenth += dwArg_len;
            }
            else
            {
                Ret = -4;  //格式错误
                break;
            }
        }
        else
        {
            Ret = -1;  //格式错误
            break;
        }


      
    }
    va_end(pArgs);
if(Ret==0)
    {
        return bufLenth;
    }
    else
    {
        return Ret;
    }
}

 

函数应用例子:

 

u8 buf[1024];

    char bufA[] = "abcdefghijk";


    MakeBufOut_FromListData(buf,6,
        0,1,0xAA,
        0,2,0xFEFE,
        0,4,0x123456,
        1,3,bufA+1,
        1,5,bufA,
        1,8,bufA+3
        );

 

存在的问题:

1,由于可变参数无法控制参数输出少了会怎么样,所以可能有写参数少了或者格式不对的风险

2,数据类型,按照数据赋值的次序写入,先低字节,再高字节

3,缓冲区类型,按照buf赋值写入,先高字节,再低字节

 

posted @ 2021-01-13 15:09  上下求索之  阅读(128)  评论(0编辑  收藏  举报