회원가입 ID/PW 찾기
AA

소스 해석이 미흡합니다 같은조라는 사람들은 잘 도와주짇않구요 ㅠㅠ
소스 해석 을 부탁드려도될까요? 아는건 적어봤는데 ㅠ 영 힘드네요



#include<stdio.h>
#include<stdlib.h>      
#include<string.h>
#include<malloc.h>
#include<time.h>

#define BER 0.1
#define frequency 100000   

void main()
{
 char* data_D;    //보내는 데이터 배열로 사용할 포인터 변수
 char* send_D;    //받는 데이터 배열로 사용할 포인터 변수
 char* divisor_P;      //제수 배열로 사용할 포인터 변수
 char* shift_R;    //쉬프트 레지스트 배열로 사용할 포인터 변수
 int length_data;   //송신부 데이터 배열의 길이만큼의 변수
 int length_send_D;   //수신부 데이터 배열의 길이만큼의 변수
 int length_divisor;       //제수 배열의 길이만큼의 변수
 int length_shift;   //쉬프트 배열의 길이만큼의 변수
 
 int total_error_cnt = 0;
 int error_c = 0;
 int error = 0;
 int not_error = 0;
 double rrand = 0;
 double no_error = 0;
 int D;

 int i,j,x,z,y;
 
 char data[255+1];
 char divisor[255+1];
 
 FILE *fp;
 
 fp = fopen("CRCTEST.txt", "w");
 
 srand( (unsigned)time( NULL ) );  //시간에 따라 랜덤값이 변환
 
 //데이터 입력
 printf("\n");
 printf(" 순환 중복 검사 \n");
 //printf("    2003730010   김만수 \n");
 //printf("    2005732034   민진경 \n");
 printf("\n Input Data :");
 scanf("%s" , data);

 length_data = strlen(data);
 data_D = (char*)malloc(sizeof(char)*length_data);
 strcpy(data_D, data);
 
 //제수 입력
 printf("\n Input Divisor :");
 scanf("%s" , divisor);
 
 length_divisor = strlen(divisor);
 divisor_P = (char*)malloc(sizeof(char)*length_divisor);
 strcpy(divisor_P, divisor);
 
 //시프트 레지스터 배열
 length_shift = length_divisor - 1;
 shift_R = (char*)malloc(sizeof(char)*length_shift);
 
 //샌드 데이터 배열
 length_send_D = length_data + length_shift;  //D + FCS 비트
 send_D = (char*)malloc(sizeof(char)*length_send_D);
 
 //메뉴
 for(y=0; y<frequency; y++)
 {
  total_error_cnt=0;
  error_c=0;
  
  for(i=0; i<length_shift; i++)
  {
   shift_R[i] = '0';
  }shift_R[length_shift]='\0';
  
  for(i=0; i<length_send_D; i++)
  {
   send_D[i] = '0';
  }send_D[length_send_D]='\0';
  
  //텍스트 출력
  fprintf(fp,"%d 번째\n", y+1);
  fprintf(fp,"\n            송신 출력 \n\n");
  for(i=0; i<length_data+1; i++)
  {   
   if(i==0)
   {
    fprintf(fp,"      ");
    for(z=length_shift-1 ; z >= 0 ; z--)
    {
     fprintf(fp," C%d " , z);
    }
     fprintf(fp,"       Input");
    fprintf(fp,"\n");
   }
   else
   {
    fprintf(fp,"      %3d   " , i );
   }

   //쉬프트 레지스터, 데이타 출력
   for(j=0; j<length_shift; j++)
   {
    fprintf(fp,"%3c ",shift_R[j]);
    if(j==length_shift-1)
    {
     if(i!=length_data)
     {
       fprintf(fp,"           %c" , data_D[i]);
     }
    }
   }
   //쉬프트 레지스터 데이타 송신 및 제수와 나누기
   rrand = ((double)rand())/((double)RAND_MAX); 

   if(rrand < BER)
   {
    send_D[i] = ((!(data_D[i]-'0'))+'0');
    total_error_cnt++;
   }
   else
   {
    send_D[i] = data_D[i];
   }

   D = ((shift_R[0]-'0')^(data_D[i]-'0')+'0');     // exclusive
      
   for(x=0; x<length_shift; x++)
   {
    if(i!=length_data)
    {
     if(x!=length_shift-1)
     {    
      shift_R[x] = ((((divisor_P[x+1]-'0')&(D-'0'))^(shift_R[x+1]-'0'))+'0');
     }
     else
     {
      shift_R[x] = D;
     }
    }
   }
   shift_R[x]='\0';
   fprintf(fp,"\n");
  }
  fprintf(fp,"\n");
  
  //출력
  fprintf(fp,"  FCS = ");
  for(j=0; j<length_shift; j++)
  {
   fprintf(fp," %c",shift_R[j]);
   
   if(rrand < BER)
   {
    send_D[j+length_data] = ((!(shift_R[j]-'0'))+'0');
    total_error_cnt++;
   }
   else
   {
    send_D[j+length_data] = shift_R[j];
   }
  }
  send_D[j+length_data]='\0';
  fprintf(fp,"\n");
  
  fprintf(fp," 입력 데이터 D = %s\n" ,data_D);
  fprintf(fp," 제수     P = %s\n" ,divisor_P);
  fprintf(fp," 송신 데이터 T = %s\n\n" ,send_D);
  
  //레지스터 초기화
  memset(shift_R,'0',length_shift);
  
  //메뉴
  fprintf(fp,"%d 번째\n", y+1);
  fprintf(fp,"\n            수신 출력 \n\n");
  for(i=0; i<length_send_D+1; i++)
  {
   if(i==0)
   {
     fprintf(fp,"      ");
    for(z = length_shift-1 ; z >= 0 ; z--)
    {
     fprintf(fp," C%d " , z);
    }
    fprintf(fp,"       Input");
    fprintf(fp,"\n");
   }
   else
   {
    fprintf(fp,"      %3d   " ,i);
   }
   
   //쉬프트 레지스터, 데이타 출력
   for(j=0; j<length_shift; j++)
   {
    fprintf(fp,"%3c ",shift_R[j]);
    if(j==length_shift-1)
    {
     if(i!=length_send_D)
     {
      fprintf(fp,"   Input = %c" , send_D[i]);
     }
    }
   }
   
   //쉬프트 레지스터 데이타 송신 및 제수와 나누기   
   D = ((shift_R[0]-'0')^(send_D[i]-'0')+'0');
    
   for(x=0; x<length_shift; x++)
   {
    if(i!=length_send_D)
    {
     if(x!=length_shift-1)
     {    
      shift_R[x] = ((((divisor_P[x+1]-'0')&(D-'0'))^(shift_R[x+1]-'0'))+'0');
     }
     else
     {
      shift_R[x] = D;
     }
    }
   }
   shift_R[x]='\0';
   fprintf(fp,"\n");
  }
  fprintf(fp,"\n");
  
  //출력
  fprintf(fp,"  FCS = ");
  for(j=0; j<length_shift; j++)
  {
   fprintf(fp,"%2c",shift_R[j]);
  }
  fprintf(fp,"\n");
  
  if(total_error_cnt > 0)
  {
   fprintf(fp,"  ERROR \n\n");
   error++;
   
   for(i=0; i<length_shift; i++)
   {
    if(shift_R[i] == '0')
    {
     error_c++;
    }
   }
   if(error_c == length_shift )
   {
    fprintf(fp,"보이지 않는 에러 \n\n");
    no_error++;
   }
  }
  else
  {
   fprintf(fp,"에러 없음\n\n");
   not_error++;
  }
 }
 printf("\n");
 printf("에러 발생 갯수 : %d개\n\n",error);
 printf("에러 발생했지만 보이지 않는 갯수: %d개\n\n",(int)no_error);
 printf("에러 발생하지 않은 갯수 : %d개\n\n",not_error);
 printf("보이지 않는 에러의 확률 : %.2lf %%\n\n",(no_error/frequency)*100);
 //printf("프레임 에러의 확률 : %d개\n\n",(/)*100);
}


=----------------------------------------------------------------------------------------------------------------------------------------=
첨부의 그림과같은 오류 검사를 하는 crc의 프로그래밍입니다 ㅠ 부탁드립니다 ㅠㅠ00.jpg

댓글 12
  • No Profile

    수업들어가고 싶지 않네요... -> 같은 조 생각

  • No Profile

    몇개를 붙이신건가요....ㅎㅎㅎㅎㅎ

  • No Profile

    너무 많이 붙이셨네요 -_-;

     

  • No Profile

    -0-;

  • No Profile

    보다가 포기....ㅠㅠ

  • No Profile

    ;;;

  • 중간쯤 보다가 후딱 넘겨 봤습니다. 도움되지 못해서 죄송합니다.

  • No Profile

    그냥 TXT 파일로 올리시지.....보기가 힘듬..

  • No Profile

    음...저도 C언어 잘하는편은 아니지만...이정도는...학생이시면 공부해서 해야죠...

    문법이 그렇게 어려운부분이 있는것도 아닌거 같은데....그냥 과제 해달라고 하는거 같음...

    막말해서 죄송한데요...제가 학생떄 그랬거든요...

    그래서 지금 남는게 하나도 없음...처음부터 다시 문법공부부터 해서 이제서야 펌웨어 기초적인것 쓸줄 암

    글고 왠마한건 주석 다 달렸잖아요 단락단락 위에...

    대충 하실줄 아시면 하루 맘잡고 해보세요

    그래야 실력늘어 납니다...누구한테 해달라고 하면 졸업은 커녕 사회나와서 취업 안됩니다

  • No Profile

    별로 어려운 것도 아닌데, 막상 보려고 하니, 눈을 아주 피곤하게 하는 군요.

    모든 것을 해달라고 하면, 해주는 사람 없을 것입니다.

    아마도 돈을 달라고 하겠죠.

    도움을 받고자 원한다면, 공부하다가 모르는 부분을 정확하게 설명하여 문의하시면,

    아마도 상세한 답변과 부연 설명을 들을 수 있지 않을까 합니다

    보통 고수들은 공부하거나 성의가 없는 사람에게도 일인반구 관심을 갖지 않거든요.

    그리고 마음만 맞으면, 거의모든 것을 알려주기도 하죠/

  • No Profile

    계속 붙여놓으셨어요;;;;;

  • No Profile

    감사합니다...

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
688 마이크로프로세서 HOT디버거 장단점 비교글2 만사통 2339 2010.12.02
687 마이크로프로세서 HOTarm사의_cortextm-m3의_특성_및_최신_동향2 만사통 1870 2010.12.02
686 마이크로프로세서 HOTATmega128RFA1 Wireless AVR이 기존의 atemga128과 특별히 다른점이 있나요 aerojang827 1622 2010.11.30
685 마이크로프로세서 HOTArtwork하려는데 어떤툴 및 책을 봐야 하는지?2 호호아자씨 947 2010.11.29
684 마이크로프로세서 HOT제발 설명 좀 해주세요..8 POV매니아 1400 2010.11.27
683 마이크로프로세서 HOT타이머카운트1번을 3번으로 변경하려는데 테스트해봐도 잘안돼네요..1 온니무 1466 2010.11.24
682 마이크로프로세서 HOTAVR128 소스문의드립니다. 훈돌이 1381 2010.11.24
681 마이크로프로세서 HOT마이컴이 하나 필요합니다...2 멍치 1316 2010.11.23
680 마이크로프로세서 HOT컴파일러 종류에대한 소스코드1 Engr James 1305 2010.11.22
679 마이크로프로세서 HOTatmega128에서 buzzer 소리를 조절할 수 있나요?4 어서오십쇼 4967 2010.11.21
678 마이크로프로세서 HOTADC평균값을 내고 PWM을 제어ㅠㅠㅠ3 말티즈코난 3008 2010.11.20
677 마이크로프로세서 HOTjtag 와 보드가 연결되지 않네요.ㅠㅠ4 sky2man 1362 2010.11.20
676 마이크로프로세서 HOTatmega128 SPI Interconnection 질문드립니다..3 누에 1842 2010.11.19
675 마이크로프로세서 HOT프로그램에서 카운터 부분 설명 및 딜레이는 어떻게 해야 하는지 가르쳐주세요 POV매니아 1325 2010.11.18
674 마이크로프로세서 HOTAVR128 UART통신4 멋진레이닝 2056 2010.11.17
673 마이크로프로세서 HOTAVR128 스위치를 이용하여 LED제어2 멋진레이닝 1951 2010.11.17
672 마이크로프로세서 HOTAVR128 공부 시작할때...2 멋진레이닝 1289 2010.11.17
671 마이크로프로세서 HOT8051 타이머 질문입니다.2 partangel 1512 2010.11.17
670 마이크로프로세서 HOT엔코더 , 포토 인터럽트 센서가 뭔가요? POV매니아 1900 2010.11.17
669 마이크로프로세서 HOTLED 잔상효과를 이용한 문자열 출력 프로그램 소스 질문 POV매니아 3003 2010.11.17
Prev 1 ... 11 12 13 14 15 16 17 18 19 20 ... 50 Next
  • 힘으로서 사람을 복종시키지 말고 덕으로서 사람을 복종시켜라.
    - 맹자
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.