打印
[技术问答]

长数据分包的四种实现方法(附带源码)

[复制链接]
300|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhamatu|  楼主 | 2020-4-27 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include "stdlib.h"

typedef unsigned char uint8_t;


#define MAX_PACKAGE_LEN   8 //20 或者 64 或者 16

void uart_tx(uint8_t *wr_buf, uint8_t buf_len)
{
        uint8_t i = 0;

        if(buf_len > MAX_PACKAGE_LEN)
                return ;
/*
        for(i=0; i<buf_len; i++ )
        {
                printf("%c",*wr_buf++);
        }
*/
        printf("%.*s", buf_len, wr_buf);
}


使用特权

评论回复

相关帖子

沙发
zhamatu|  楼主 | 2020-4-27 21:57 | 只看该作者
fenbao1(uint8_t *wr_buf, uint8_t buf_len)
{
        while(1)
        {
                if(buf_len > MAX_PACKAGE_LEN)
                {
                        uart_tx(wr_buf, MAX_PACKAGE_LEN);
                        buf_len -= MAX_PACKAGE_LEN;
                        wr_buf += MAX_PACKAGE_LEN;
                }
                else
                {
                        uart_tx(wr_buf, buf_len);
                        break;
                }
        }
}

使用特权

评论回复
板凳
zhamatu|  楼主 | 2020-4-27 21:58 | 只看该作者

fenbao2(uint8_t *wr_buf, uint8_t buf_len)
{
        while(buf_len > 0)
        {
                if(buf_len > MAX_PACKAGE_LEN)
                {
                        uart_tx(wr_buf, MAX_PACKAGE_LEN);
                        buf_len -= MAX_PACKAGE_LEN;
                        wr_buf += MAX_PACKAGE_LEN;
                }
                else
                {
                        uart_tx(wr_buf, buf_len);
                        buf_len = 0;
                }
        }
}

使用特权

评论回复
地板
zhamatu|  楼主 | 2020-4-27 21:58 | 只看该作者
fenbao3(uint8_t *wr_buf, uint8_t buf_len)
{
        uint8_t zhengbao_num = buf_len / MAX_PACKAGE_LEN ;
        uint8_t sanbao_num = buf_len % MAX_PACKAGE_LEN;

        uint8_t  i = 0;

        for(i=0; i<zhengbao_num; i++ )
        {
                uart_tx(wr_buf, MAX_PACKAGE_LEN);
                wr_buf += MAX_PACKAGE_LEN;
        }

        uart_tx(wr_buf, sanbao_num);
}

使用特权

评论回复
5
zhamatu|  楼主 | 2020-4-27 21:59 | 只看该作者
fenbao4(uint8_t *wr_buf)
{
        uint8_t buf_len = 0;
        uint8_t tmp_buf_len = 0;
        uint8_t i=0;

        uint8_t zhengbao_num = 0;
        uint8_t sanbao_num = 0;
/*
        while(* (++wr_buf) != '\0')
        {
                buf_len ++;
        }
        printf("buf_len:%d\n",buf_len);
*/
        while(*wr_buf != '\0')
        {
                buf_len ++;
                wr_buf++;
        }
        printf("buf_len:%d\n",buf_len);
        zhengbao_num = buf_len / MAX_PACKAGE_LEN ;
        sanbao_num = buf_len % MAX_PACKAGE_LEN;       
    wr_buf -= buf_len;

        for(i=0; i<zhengbao_num; i++ )
        {
                uart_tx(wr_buf, MAX_PACKAGE_LEN);
                wr_buf += MAX_PACKAGE_LEN;
        }

        uart_tx(wr_buf, sanbao_num);
       
                       
}

使用特权

评论回复
6
zhamatu|  楼主 | 2020-4-27 22:00 | 只看该作者
void main()
{
        //uint8_t tmp[] = "1234567890abcdefg\n";
        uint8_t tmp[] = "123\n";
        fenbao1(tmp, sizeof(tmp));
        fenbao2(tmp, sizeof(tmp));
        fenbao3(tmp, sizeof(tmp));
        fenbao4(tmp);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝