⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmodem.c

📁 ATMEGA128的BOOTLOADER
💻 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 + -