📄 xmodem.c
字号:
/*****************************************************
Project : Xmodem接收
Version : 1.0
Date : 2005-7-13
Author : Liu.Qian
Company : HuanXiang GCT
Comments: Creat
*****************************************************/
#include "config.h"
extern uint8_t *gui8_data;
/*****************************************************************************************
Function: wait_soh
Description: 每秒向PC机发送一个控制字符“C”,等待控制字〈soh〉
Calls: 无
Called By: 无
Globel RD: rx_counter1
Globel WR: 无
Input: 无
Output: 无
Return: 无
Others: 无
Auther: Liu.Qian
Time: 2005-7-13
*****************************************************************************************/
void wait_soh()
{
uint16_t temp;
while(1)
{
Uputchar(XMODEM_RECIEVING_WAIT_CHAR); //send a "C" once a second
for(temp=0;temp<1000;temp++)
{
if(rx_counter)
{
return;
}
DelayMs(1);
}
}
}
/*****************************************************************************************
Function: get_pack
Description: 接收一个pack
Calls: 无
Called By: 无
Globel RD: gui8_packNO
Globel WR: 无
Input: *pack_add:接收地址,pack_no包序号
Output: 无
Return: 1:data,2:end
Others: 无
Auther: Liu.Qian
Time: 2005-7-13
*****************************************************************************************/
uint8_t get_pack(uint8_t *pack_add, uint8_t pack_no)
{
uint8_t i;
uint16_t crc,crctemp;
uint8_t soh;
uint8_t pack0,pack1;
crc=0;
for(;;)
{
soh=Ugetchar();
if (soh==XMODEM_EOT)
{
Uputchar(XMODEM_ACK);
for(i=0;i<128;i++) //后128个字节填0xFF
{
*pack_add++ = 0xff;
}
return(0);
}
pack0=Ugetchar();
pack1=~Ugetchar();
for(i=0;i<128;i++) //接收128个字节数据
{
*pack_add=Ugetchar();
pack_add++;
}
crctemp=Ugetchar();
crctemp<<=8;
crctemp|=Ugetchar();
pack_add -= 128;
for(i=0;i<128;i++)
{
crc=_crc_xmodem_update(crc,*pack_add);
pack_add++;
}
if ((soh!=XMODEM_SOH)||(pack0!=pack1)||(crc!=crctemp)||(pack0!=pack_no))
{
Uputchar(XMODEM_NAK); //要求重发数据块
}
else
{
return(1);
}
}
}
// end of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -