📄 code.txt
字号:
#defineUARTORBUFSIZE
#include”stdio.h,,
#include”math.h,,
usxdataUARTO一BUF[UARTO一BUF_SIZE],UART0eeRBUF[UART0esRBUF_SIZE];
刀建立发送/接收缓冲区可以用at分配固定地址
ul6count7e,reelength;//统计7E个数//reelength占用接收缓冲区的实际长度
刀用于提取IP时定界lengtharray,AT命令数组长度
ul6*Point;
bitend7e;
bitreee;
usloado价e;
usATlen;
u16loadlen;
useount;
uslength;
ul6lengtharray:
intTIO
intRIO
//接收的数据包结尾标志当为1时不再接收数据
//CRC一ITU查找表
eonstul6codecretab16[256]=
{
0x0000,oxl189,0x2312,0x329b,0x4624,ox57ad,0x6536,ox74bf,0x8c48,oxgdel,
oxafsa,oxbed3,oxca6e,oxdbes,oxe97e,ox招f7,0xl081,0x0108,0x3393,ox22la,
0x56a5,0x472e,0x75b7,0x643e,oxgccg,0x8d40,oxbfdb,oxae52,oxdaed,oxeb64,
ox份ff,0xe876,0x2102,0x308b,0x0210,0xl399,0x6726,ox76af,0x4434,ox55bd,
oxad4a,oxbcc3,0x8e58,oxgfdl,oxeb6e,oxfae7,oxe87e,oxdgfs,0x3183,0x200a,
ox1291,0x0318,0x77a7,0x662e,0x54b5,0x453e,oxbdcb,oxae42,oxgedg,oxsf5o,
oxfbef,oxea66,oxdsfd,0xe974,0x4204,Ox538d,0x6116,0x709f,0x0420,0x15a9,
0x2732,ox36bb,oxce4e,oxdfcs,oxedse,oxfcd7,0x8868,ox99el,oxab7a,oxba份,
0x5285,0x430e,0x7197,Ox601e,oxl4al,0x0528,0x37b3,0x263a,oxdecd,oxef44,
oxfddf,oxee56,0x98e9,Ox8960,oxbbfo,oxaa72,0x6306,0x728f,0x4014,oxslgd,
0x2522,ox34ab,0x0630,0x17b9,oxef4e,Oxfee7,oxeese,oxddds,oxa96a,oxbse3,
0x8a78,oxgbfl,0x7387,0x620e,0x5095,ox41le,0x35a3,0x242a,ox16bl,0xO738,
oxffcf,oxee46,oxdcdd,oxed54,oxbgeb,0xa862,oxgafg,0x8b70,0x8408,0x9581,oxa7la,
0xe226,oxdobd,0xc134,0x39c3,Ox284a,oxladl,0x0b58,ox7fe7,ox6e6e,oxsefs,
ox4d7e,oxc60e,0xd785,oxesle,0xf497,0x8028,oxglal,oxa33a,oxbZb3,0x4a44,
oxsbcd,0x6956,ox78df,0x0e60,oxldeg,0x2f72,ox3efo,oxd68d,0xc704,oxf59f,
oxe416,0x90a9,0x8120,oxb3bb,0xa232,oxsacs,ox4b4e,0x79d7,Ox685e,oxlcel,
0x0d68,0x3仍,oxZe7a,oxe70e,0xf687,oxc4le,0xd595,oxa12a,oxboa3,0x8238,
ox93bl,Ox6b46,ox7acf,0x4854,ox59dd,0x2d62,ox3ceb,0x0e70,0xl的,ox价sf,
0xe606,oxd49d,oxcs14,oxblab,0xa022,0x92b9,0x8330,ox7bc7,ox6a4e,0x58d5,
0x495e,ox3de3,oxZc6a,oxlefl,0x0价8,
计算给定长度数据的16位CRC
l6Crel6(constus*P,u16fcs,intnLength,intifend)
ul6fes=Oxfll长
while(nLength>0)
{
fes=(fcs>>8)Aeretab16[(fcsA*P)&ox用;
nLength一:
p++;
}
if(ifend==0)
else
retum(fcs);
retum(一fes):
数据处理7E转换
sFune(us*P,intnLength,int*eount)
for(inti=0:i<(nLength一*eount):i++)
{
unsignedlongIPdata:
ul6IP_UDP(eonstus*Pl,inin,intifend)
{
ul6temP;
while(n>1)
{
temP=*Pl<<8:
temP+=*印1+l):
IPdata=IPdata+temP;
PI++;
Pl++;
n=n一sizeof(u16);
}
if(n)
{
temP=*PI<<8;
IPdata=IPdata+temP;
}
IPdata=(IPdat少>16)+(IPdata&oxf’fI为;
IPdata=IPdata+(IPdata>>16):
if(ifend==0)retum(IPdata&oxffff);
charcodeAl[]={ox7E};
chareodeAZ[」={Ox21}:
chareodeA3[]={0x45,0x00,0x00,oxZE,0x09,ox0B,0x00,0x00,0x80,oxll}:
usXdataA4[]={0,0};
usxdataA3OO[]={ox0A,oxBC,ox6F,oxD7};
charcodeAS[]={ox0A,0x00,0x00,oxAC};
charcodeA6[]={oxCO,ox3o,0x23,oxFI}:
charcodeA7[」={Ox00,ox1A}:
ehareodeAS[]={0x33,oxFA}:
usxdataAg[]={0,O};
eharcodeA10[]={ox0A,0x00,oxOF,0x12,oxol,oxlo,ox0A,0x00,0x04,0x80,0x83,
oxD4,0x60,0x04,oxsl,0x83,oxD4,0x60};
harcodeAll[]={ox7E};
16XdataA12[」={0,0}:
16xdatafes;
l6xdataA13;
l6xdataA14;
u16xdataA200;
//装载数据子程序
voidloadaxray(us*addarray,ul6length)
{
u16i;
loadlen=1;i=0;
while((i<length)&&(((loadlen+l)AOx01均!=0))
{
UARTOJBUF【loadlen]=*addarray;
addarray++:i++;
loadlen=++loadlen&ox01ff;
}
}
刀测试发送缓冲区满
//写入发送缓冲区待发送
//计算IP校验UDP校验及CRC校验
us*P:
us*Pl,*PZ:
intnl,nZ,nLength,x;
intifend=0:eount=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -