串口发送函数接口定义

之前的项目
使用这种方式来为串口发送buffer赋值;
维护起来觉得复用性不够强,增加了一些垃圾代码;
代码格式如下

uint8_t  Tx_buffer[200];
memset(Tx_buffer,0,sizeof(Tx_buffer));
sprintf(Tx_buffer,"CMD:%s,value:%d\r\n","hello",1);
HAL_UART_Transmit(&huart3,Tx_buffer,strlen(Tx_buffer),100);

每次要要必不可少的写sprintf(Tx_buffer,“CMD:%s,value:%d\r\n”,“hello”,1);

如果有人代码不够简洁;

就会写2行/3行来完成串口输出;
2行:

sprintf(Tx_buffer,"CMD:%s,value:%d\r\n","hello",1);
HAL_UART_Transmit(&huart3,Tx_buffer,strlen(Tx_buffer),100);

3行:

memset(Tx_buffer,0,sizeof(Tx_buffer));
sprintf(Tx_buffer,"CMD:%s,value:%d\r\n","hello",1);
HAL_UART_Transmit(&huart3,Tx_buffer,strlen(Tx_buffer),100);

假设一个工程师写代码发送1次串口数据包会写3行代码;
那么一个项目有200条指令集,
他就要写600行;
考虑到复用性,如果发送1次只要调用1行代码,就简洁多了;

我想了想------
---------他们这样写代码可能是忘了:可以封装一个函数,像printf一样传参,之不够初级工程师不太了解可变参数怎么传参,不知道怎么解析,不会定义像printf的这种函数接口;

很多人考虑使用printf重定向;
还有另一种方法是传可变参数;

今天就使用另一种方法,来封装串口输出;//实测可用//定义这个函数,调用的时候像使用printf一样简介(支持可变参数)

void USER_printf(const char *format, ...)
{
    if(rec1_end_flag)
    {
        va_list args;
        int len = 0;
        memset(buffer_485,0,sizeof(buffer_485));
        va_start(args, format);//为N个参数初始化
        len = vsnprintf(buffer_485,sizeof(buffer_485),format,args);
        va_end(args);
        HAL_UART_Transmit(&huart1,buffer_485,strlen(buffer_485),100);
        RS485_Dir(1);//启动RS485接收
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值