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

📄 cksum.c

📁 cf8020+cp2200(网络)的驱动实现
💻 C
字号:
/*
;-------------------------------------------------------------------------
; Copyright (c) 2002 Jim Brady
; Do not use commercially without author's permission
; Last revised August 2002
; CKSUM.A51
;
; This computes the internet checksum on an 8051
;
; Call from C program: uint cksum(UCHAR  * buf, uint length);
; Where * buf is pointer to first char (must be in  space)
; and "length" is number of bytes (not words) to sum over
;-------------------------------------------------------------------------
*/
#include "net.h"
#include "utils.h"

uint cksum(UCHAR *check,uint length) //计算校验和
{
	long sum=0;
	uint i;
	uint  *ptr; 
	uint t;
    ptr=(uint  *)check;

	for (i=0;i<(length)/2;i++)
	{
		t = *ptr++;
#ifdef __LITTLEENDIAN__		
		t = ntohs((char*)&t, 0);		
#endif
		sum += t;
	}
	if (length&0x01)//表示长度为单数
	{
		t = (*ptr);
		
#ifdef __LITTLEENDIAN__
	//	t = ReadUInt16((char*)&t, 0);	
		t = t<<8;
#endif
		sum = sum+(t&0xff00);
//		sum += t;
	}
	sum=(sum&0xffff)+((sum>>16)&0xffff);//高16位和低16位相加
	if(sum&0xffff0000)
	{//表示有进位
		sum++;
	}
	return ( (uint)((sum)&0xffff));
//	return ( (uint)(~((sum)&0xffff)));
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -