Xmodem的程序可以在linux或者各种Bootloader里找到.
但是下面这个是我自己写的----2年多以前,我还没接触或"开源"的时候,想写一个自动升级程序的程序.当时主要的原因是没有烧录器,公司好几个人,就一台烧录器----感觉搬来搬去的太麻烦,效率很低,于是找了Xmodem的资料,就有了下面的程序.
--------Xmodem.h--------
#ifndef _XMODEM_H_
#define _XMODEM_H_
//Put Data Type Header Here
#include "types.h"//这里面定义了一些变量类型的别名,如U8=unsigned char等
//Put Xmodem send/receive function Header here
#include "hw_MCU.h"//这里面声明了RS_ready,RS_rx,RS_tx,分别是检测是否有在队列中的字符,接收一个字符,传送一个字符的函数,函数类型就不细说了,看下面的调用就知道了.
#define XMODEM_READY() RS_ready()
#define XMODEM_RX() RS_rx()
#define XMODEM_TX(c) RS_tx(c)
#define XMODEM_SOH (0x01)//这几个都是跟Xmodem协议有关的几个常数,如开始,结束,应答等等
#define XMODEM_EOT (0x04)
#define XMODEM_ACK (0x06)
#define XMODEM_NAK (0x15)
#define XMODEM_CAN (0x18)
#define XMODEM_PACKET_SIZE (128)
#define XMODEM_RETRY_TIME (10)
typedef struct XModem_Frame_s//这里根据Xmodem的协议定义了一个包的结构体
{
unsigned char header;
unsigned char packetnum[2];
unsigned char* pbuf;//packet[XMODEM_PACKET_SIZE];
}XModem_Frame_t;
typedef enum XMODEM_STATE//因为使用了状态机,所以就使用了枚举来定义了几个状态
{
e_XMODEM_ENTRY=0,
e_XMOD