| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
CRC問題請教高人 | 
  
| 作者:williamt 欄目:ARM技術(shù) | 
在Zlg_IP軟件包/tcpip/crc目錄內(nèi)提供了計(jì)算CRC校驗(yàn)和的程序: /****************************************************************** **函數(shù)原型: unsigned int CHECKSUM(unsigned int xdata *check,unsigned int length) **入口參數(shù):?check : 被校驗(yàn)數(shù)據(jù)起始地址 length : 被校驗(yàn)數(shù)據(jù)長度,單位字 **出口參數(shù): 無 **返 回 值: ~((sum)&0xffff)) **說 明: 計(jì)算校驗(yàn)和 *******************************************************************/ //=================================================================== unsigned int CHECKSUM(unsigned int xdata *check,unsigned int length) { unsigned LONG sum=0; unsigned int i; for (i=0;i<(length)/2;i++) { sum += *check++; } if(length&0x01)//長度為奇數(shù)個(gè)時(shí),要進(jìn)行該操作 { sum = sum + ((*check)&0xff00); } sum = (sum&0xffff) + ((sum>>16)&0xffff);//高16位和低16位相加 if(sum & 0xffff0000) {//表示有進(jìn)位 sum++; } return ( (unsigned int)(~((sum)&0xffff)) ); } 請教高手幾個(gè)問題: 1 語句:for (i=0;i<(length)/2;i++)只對數(shù)組的前半部分求和,為什么后半部分不用? 2 一般在計(jì)算CRC時(shí),都要用到crc_tab[]數(shù)組,為什么此地不用?  | 
  
| 2樓: | >>參與討論 | 
| 作者: yzb1658 于 2005/10/2 9:42:00 發(fā)布:
         你對程序的理解錯(cuò)誤 這里是對TCP或UDP包的校驗(yàn),不是IP的CRC校驗(yàn),去長度的一半,原因是這里需要雙SHORT為累加單位,在TCP的算法有明確的規(guī)定。 crc的table的生成有兩種方法,一種是直接給出數(shù)組,還有一種是運(yùn)算得到數(shù)組 QQ:421388916  | 
  |
  | 
    
 
  | 
  
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 | 
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號(hào)  |