📄 cksum.c
字号:
/*
;-------------------------------------------------------------------------
; CKSUM.A51
;
; This computes the internet checksum on an 8051
;
; Call from C program: UINT cksum(UCHAR xdata * buf, UINT length);
; Where * buf is pointer to first char (must be in xdata space)
; and "length" is number of bytes (not words) to sum over
;-------------------------------------------------------------------------
*/
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "option.h"
#include "ethernet.h"
#include "arp.h"
#include "string.h"
#include "lib.h"
unsigned short cksum(unsigned char *check, unsigned short length)
{
unsigned long sum=0;
unsigned short i;
unsigned short *ptr;
ptr=(unsigned short *)check;
for (i=0;i<(length)/2;i++)
{
sum+=ntohs(*ptr++);
// Uart_Printf("\n IP: sum %x %d \n",sum,i);
}
if (length&0x01)
{
sum=sum+((ntohs(*ptr))&0xff00);
}
sum=(sum&0xffff)+((sum>>16)&0xffff);
if(sum&0xffff0000)
{
sum++;
}
return ( (unsigned short)((sum)&0xffff));
// return ( (UINT)(~((sum)&0xffff)));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -