메뉴 건너뛰기

프로그래밍


CRC 체크 소스 관련 질문 드립니다.

2005.12.11 19:55 조회 수 : 663

프로젝트에서 님이 공개 하신..

CRC 소스를 컴파일 했는데.. 오류가 나네요..

소스 내용은

-----------------------------------------------

/* CRC-32b version 1.03 by Craig Bruce, 27-Jan-94
**
** Based on "File Verification Using CRC" by Mark R. Nelson in Dr. Dobb's
** Journal, May 1992, pp. 64-67. This program DOES generate the same CRC
** values as ZMODEM and PKZIP
**
** 수정 : 한원희, 차용주
*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
#include <math.h>

#define OCTET 256
#define ECTET_MAX 255
#define FRAME_SIZE 1024
#define FCS_SIZE 4
#define TOTAL_SIZE 1028
#define ERROR_STEP 200
#define ERROR_MAX 4100
#define TEST_TIMES 1000


void frame_gen(char *frame) ;
void error_gen(char *frame, int err_cnt) ;
void crcgen(void) ;
void err_pos_gen(int err_cnt) ;
int get_fcs(char *frame, int frame_size) ;


unsigned long crcTable[256];
int error_pos[TOTAL_SIZE*8] ;


/****************************************************************************/
int main( int argc, char *argv[] )
{
int err_cnt, i, count ;
unsigned long crc;
time_t seed ;
char in_frame[TOTAL_SIZE], out_frame[TOTAL_SIZE] ;

time(&seed) ;
srand(seed) ;
crcgen(); /* 초기화... */


printf(" *** CRC 에러 검출 시뮬레이션 ***\n\n") ;
printf("에러수\t\t전송수\t\t검출수\n") ;
for(err_cnt=ERROR_STEP ; err_cnt<ERROR_MAX ; err_cnt+=ERROR_STEP)
/* 시뮬레이션을 에러가 1개일때 6개 일때 11개일때... 31개일때 */
{
count = 0 ;
err_pos_gen(err_cnt) ;
/* 에러가 발생할 자리를 미리 정한다. */
for(i=0 ; i<TEST_TIMES ; i++)
{
frame_gen(in_frame) ;
crc = get_fcs(in_frame, FRAME_SIZE) ;
memcpy(in_frame+FRAME_SIZE, &crc, sizeof(crc)) ;
memcpy(out_frame, in_frame, TOTAL_SIZE) ;
error_gen(out_frame, err_cnt) ;
crc = get_fcs(out_frame, TOTAL_SIZE) ;
if(crc != 0) count ++ ;
}
printf("%5d\t\t%5d\t\t%5d\n", err_cnt, i, count) ;
}

return( 0 );
}


/****************************************************************************/
/* void frame_gen(char *frame) ; */
/* 쓰임새 : 난수발생으로 임의의 데이터 전송 프레임을 만든다. */
/* 매개변수 : */
/* frame - 난수 발생으로 생성한 데이터 프레임이 저장될 주소 */
/* 반환값 : 없음. */
/****************************************************************************/
void frame_gen(char *frame)
{
int i ;

for(i=0 ; i<FRAME_SIZE ; i++)
frame[i] = rand()%255 ; /* 0-255 사이의 난수 발생 */
}


/****************************************************************************/
/* void error_gen(char *frame, int err_cnt) ; */
/* 쓰임새 : 난수발생으로 임의의 에러를 생성한다. */
/* 매개변수 : */
/* frame - 데이터 프레임이 저장되어 있는 주소 */
/* err_cnt - 데이터 프레임에서 발생할 에러의 개수 */
/* 반환값 : 없음. */
/****************************************************************************/
void error_gen(char *frame, int err_cnt)
{
int i=0, l, k ;

for(i=0 ; i<err_cnt ; i++)
{
l = error_pos[i]/8 ;
k = error_pos[i]%8 ;
frame[l] = frame[l] ^ (1<<k) ;
} /* 미리 결정한 에러가 발생할 자리의 비트를 반전시켜서
에러를 발생시킨다. */
}


/****************************************************************************/
/* void err_pos_gen(int err_cnt) ; */
/* 쓰임새 : 에러가 발생할 위치를 미리 결정해 놓는다. */
/* 속도문제 개선을 위해 미리 계산해 놓는다. */
/* 매개변수 : */
/* err_cnt - 에러가 발생할 개수 */
/* 반환값 : 없음. */
/****************************************************************************/
void err_pos_gen(err_cnt)
{
int i, j, k ;

for(i=0 ; i<err_cnt ; i++)
{
while(j!=i)
{
k = rand()%(TOTAL_SIZE*8) ;
for(j=0 ; j<i ; j++)
if(error_pos[j]==k) break ;
error_pos[i] = k ;

}
}
}


/****************************************************************************/
/* void crcgen(void) ; */
/* 쓰임새 : 바이트(256개)에 대한 CRC-32에 대한 나머지값들을 계산과정 */
/* 에서의 속도문제 개선을 위해 미리 계산해 놓는다. */
/* 매개변수 : 없음. */
/* 반환값 : 없음. */
/****************************************************************************/
void crcgen(void)
{
unsigned long crc, poly;
int i, j;

poly = 0xEDB88320L; /* zmodem과 pkzip에서 사용되는 공개 폴리노미얼 */
for (i=0; i<256; i++) {
crc = i;
for (j=8; j>0; j--) {
if (crc&1) {
crc = (crc >> 1) ^ poly; /* 1이면, 뺀다. */
} else {
crc >>= 1; /* 0이면, 쉬프트만 */
}
}
crcTable[i] = crc;
} /* 8비트(256)에 해당하는 CRC의 나머지 값을 미리 계산해 놓는다. */
/* 최하위 비트가 그림에서의 최상위 비트가 된다. (역순으로 계산함...) */
}


/****************************************************************************/
/* void get_fcs(char *frame, int frame_size) ; */
/* 쓰임새 : 현재 프레임에 대한 FCS값(CRC 검사값)을 얻어온다. */
/* 매개변수 : */
/* frame - CRC를 check할 데이터 프레임. */
/* frame_size - 데이터 프레임의 크기. */
/* 반환값 : 없음. */
/****************************************************************************/
int get_fcs(char *frame, int frame_size)
{
register unsigned long crc ;
int b, i ;

crc = 0xFFFFFFFF ;

/* 데이터 프레임 전체를 하나의 M으로 보고 FCS를 계산한다. */
for(i=0 ; i<frame_size ; i++)
crc = ((crc>>8) & 0x00FFFFFF) ^ crcTable[(crc^frame[i]) & 0xFF];
/* 들어온 바이트 만큼 쉬프트 시키면서 나머지를 계산해 나간다. */
return (crc^0xFFFFFFFF) ;
/* 처음에 반전된 것을 원래대로 만든다. */
}
---------------------------------------------------

이거 였구요.. 쥔장님께서 프로젝트 쪽에 CRC 체크

소스로 공개 하신소스 입니다.

.NET 에서 컴파일 을 하니까.. 프로그램이 오류나면서

다운되네요.. .

음.. main 함수를 보니 인자가 들어가는거 같은데.

음.. 어째서 .. 프로그램이 다운이 되나요.;;

답변 좀 부탁드립니다.


이 게시물이  
AiRPAGE가  
번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [52] 파이팅건맨 2016.02.20 231019
공지 [펌] ARM GCC Inline Assembler Cookbook 파이팅건맨 2006.08.18 41210
공지 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 25160
86 crc체크기??crc체크? [1] 초보 2006.01.08 775
85 [TIP] Android에서 MS의 Face Rest API사용하기 (How to use the MS Face API on Android) 파이팅건맨 2019.07.16 756
84 CRC - 16 소스 수정할려고 하는데 어떻게 해야할지.. 질문드립니다. [1] 전철민 2006.06.23 756
83 [TIP] Windows 에서 장치 연결/제거 관리 코드 파이팅건맨 2007.12.21 753
82 [TIP] Win32 API를 사용하여 응용 프로그램 열거하기 파이팅건맨 2009.01.15 712
81 무선랜카드에서 연결속도 및 신호강도 받아오는 방법이 궁금합니다. [1] 정성욱 2006.06.26 709
80 [C소스]간단한 Hash 구현 파이팅건맨 2000.04.20 704
79 시리얼통신관련 질문..(응답속도에 관해..) [1] 고진원 2006.04.03 701
78 [VC소스]VIEW에 낙서하기 파이팅건맨 1999.11.12 692
77 Lex와 Yacc의 사용법 강좌 파이팅건맨 2000.10.09 672
» CRC 체크 소스 관련 질문 드립니다. [1] 2005.12.11 663
75 [TIP] 자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 파이팅건맨 2013.05.04 659
74 [펌] precompiled header 설정 관련 파이팅건맨 2007.08.07 654
73 [TIP] 퍼포먼스를 높여주는 몇가지 코딩 예 파이팅건맨 2016.01.22 648
72 [펌]키입력을 바로 처리하는 linux용 코드 파이팅건맨 2006.08.23 637
71 [TIP] (MSDN) VS2005 에서 BHO 만드는 방법 링크 파이팅건맨 2009.01.06 620
70 [TIP] 각종 API 후킹 혹은 어플리케이션 후킹 방법 모음 파이팅건맨 2005.07.30 579
69 [LINK] VC++7 to VC++6 project converter 파이팅건맨 2004.04.28 575
68 PHP,ASP,PERL에서 파일사이즈 알아내는 방법(For GunClient...) 파이팅건맨 2003.05.30 574
67 SNTP Protocol을 이용하는 소스 예제 파이팅건맨 2003.12.30 570
위로