tag 标签: checksum

相关博文
  • 热度 14
    2010-12-4 17:49
    2135 次阅读|
    2 个评论
    Rule : The reserved ARM interrupt vector location(0x0000 0014) should contain the 2's complement of the check-sum of the remaining interrupt vectors. This causes the checksum of all of the vectors together to be 0. Polynomial: V0 + V1 + V2 + V3 + V4 + Sum + V6 + V7 = 0 Code: void CCalc_nxp_checksumDlg::OnCalc() {  // chose bin file  CString sFilename;  CFileDialog dlg(TRUE);      // open with TRUE, save with FALSE  if(dlg.DoModal() == IDOK) {   sFilename = dlg.GetPathName();   // full path  }   // read 8 interrupt vectors  CFile file;  if(!file.Open(sFilename, CFile::modeRead)) { return; }  int data ;  BYTE str ;  for(int i=0; i8; i++) {   file.Read(str, 4);   data = *(int *)str;  }  file.Close();  // calc checksum  int sum = 0;  for(i=0; i8; i++) {   if(i != 5) { sum += data ; }  }  sum = 0 - sum;  BYTE checksum ;  int *sum_ptr = ∑  BYTE *ptr = (BYTE *)sum_ptr;  for(i=0; i4; i++) {   checksum = *ptr;   ptr++;  }  CString sResult;  sResult.Format("%X %X %X %X", checksum , checksum , checksum , checksum );  GetDlgItem(IDC_EDIT1)-SetWindowText(sResult); } Conclusion: In current most IDE, the interrupt vector checksum can be calculated. But for the other old IDE, we have to calculate the checksum by ourselves. Written by Allen in Shenzhen 2010.12.04
  • 热度 19
    2010-5-24 09:14
    1750 次阅读|
    2 个评论
    The sample code is to check the correct gprmc format with the last chars, and try to calculate the checksum of gprmc. // parameters: // softuart_revbuf: the whole nmea string with header_char '$' and endchar_char 0x0a // softuart_revbuf_len: the length of this nmea string // return: // TRUE: right format; FALSE: bad string format with error end chars or checksum bool nmea_checksum(U8* softuart_revbuf, U32 softuart_revbuf_len) {             U8 checksum = 0;             U8 sum , nmea_sum ;             // "$GPRMC"             if( (softuart_revbuf =='R') (softuart_revbuf =='M') (softuart_revbuf =='C') ) {                 // check nmea data with length, and '*'0x0d0x0a as endchar                 if( (softuart_revbuf_len10) || (softuart_revbuf !=0x0d) || (softuart_revbuf !='*') ) {                     return FALSE;                                }                                 // checksum                 for(U32 i=1; i(softuart_revbuf_len-5); i++)                     checksum ^= softuart_revbuf ;                 nmea_sum = softuart_revbuf ;                 nmea_sum = softuart_revbuf ;                            copy_2xchar_1xchar(sum, nmea_sum, 1);                 if( checksum != sum ) {                     return FALSE;                 }            }            return TRUE; } Allen Zhan GV-TECH 2010.05.24
相关资源