1.测试方式与代码
在上一篇文章中,我们通过C代码实现了XMODEM通信协议库设计,本篇文章我们将编写一段测试程序,实现对XMODEM库进行测试。
测试过程采用PC串口方式实现,操作系统为UBUNTU20,编译工具为GCC,其实现过程如下所示。
1.1.创建XMODEM对象
首先,我们需要创建一个XMODEM对象
//定义XMODEM对象
static xmodem_t xmodem_obj={
XMODEM_DATA_128, //采用128字节数据
XMODEM_CHK_MD_ADD, //累加和方式校验
XMODEM_REQ_NONE, //初始化XMODEM请求
XMODEM_STATE_IDLE, //初始化XMODEM状态
80, //等待阈值80次
0, //初始化等待计数器
XMODEM_RX_ST_IDLE, //初始化接收空闲
10, //接收重试超时阈值10次
0, //初始化超时重试计数器
xmodem_tx, //注册发送过程
xmodem_rx, //注册接收过程
xmodem_cb, //注册回调过程
{
0}, //初始化缓冲区
0, //当前接收长度
0, //初始化帧计数
};
1.2. 接口函数实现
在对象中,存在三个接口函数,它们分别为”xmodem_tx”,”xmodem_rx”,”xmodem_cb”这三个函数。
其中xmodem_tx实现了XMODEM发送功能,它通过调用系统代码如下:
//xmodem发送过程,配置给串口
type_err xmodem_tx(type_uint8 *buf, type_uint16 len)
{
uart_write(uart_fd,(type_char *)buf,len);
return STATE_OK;
}
xmodem_rx实现了XMODEM数据接收过程,同样调用系统串口实现:
//xmodem接收过程,配置给串口
xmodem_rx_st_t xmodem_rx(type_uint8 *buf, type_uint16 buf_len, type_uint16 *len, type_uint16 timeout)
{
type_int16 rx_len=0;
type_uint8 data;
printf("RECEIVING\n\r");
//循环接收,直到满一帧数据
while(rx_len<buf_len)
{
//阻塞方式接收,每次接收一个字节,若超时则返回超时
if(uart_read(uart_fd,(type_char *)&data,1)<=0)
{
printf("RX TIMEOUT\n\r");