不同的方式的分包源码:
#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);
}
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;
}
}
}
//方法二:
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;
}
}
}
//方法三:
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);
}
//方法四:
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);
}
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);
}