본문 바로가기
코스웨어/15년 스마트컨트롤러

20151210 - 홍준모 RFID 시리얼 통신 Dos 용 마무리, 내일 window 용 할 것

by 알 수 없는 사용자 2015. 12. 10.
728x90
반응형

우리가 현재 하는 프로젝트 이름은

RFID Project

ISO - 15693

Host command

이다.





코드 부분을 보면,

  ucTemp = caString[9];
  caString[9= caString[10];
  caString[10= ucTemp;

  printf("TR-TYPE  : ");
  if (0 != ((*((unsigned short *)(&caString[9]))) & 0x0001))
  {
    printf("[I-Code 1] ");
  }
  if (0 != ((*((unsigned short *)(&caString[9]))) & 0x0002))
  {
    printf("[Tag-it HF] ");
  }
  if (0 != ((*((unsigned short *)(&caString[9]))) & 0x0008))
  {
    printf("[ISO 15693] ");
  }
  if (0 != ((*((unsigned short *)(&caString[9]))) & 0x0040))
  {
    printf("[I-Code EPC] ");
  }
  if (0 != ((*((unsigned short *)(&caString[9]))) & 0x0080))
  {
    printf("[I-Code UID] ");
  }
  putchar('\n');


이러하고 실행 결과는,



이렇다.

빅 엔디안과 리틀 엔디안 개념은 정말 아직 헷갈린다.. 우리는 늘 리틀 엔디안 개념인 인텔에서만 수업을 해왔고 코딩을 해왔으니..

네크워크는 빅엔디안으로 저장하는데 나중에 네크워크 쪽 회사에 입사하면 조금 .. 느리게 코딩할 수 있으니 개념을 확실히 계속 잡아갈 필요가 있는 듯 하다.. 복잡한 건 질색인데..


 1. 빅엔디안

- 주로 UNIX를 사용하는 RISC 프로세서 계열에서 사용하는 바이트 오더
- 네트워크 프로토콜에서 표준으로 사용하는 바이트 오더

- 메모리 시작 주소에 상위 바이트 부터 기록
ex)
4바이트(32bit)값 0x01020304를 빅엔디안 순서로 메모리에
입력되는 과정을 보면 다음과 같다.
 

 

 




=>그림을 보면 네모 한칸이 각각 메모리 한 번지를 의미하며,하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다.
 하위주소 즉 시작 주소에 
0x01020304 값중 가장 상위바이트인 0x01을 넣고, 다음 주소에 각각 하위바이트 값들을 넣어준다.


TIP:네트워크 프로토콜에서는 바이트 오더(순서)로 빅엔디안을 따르도록 하고 있으므로,
흔히 Intel계열 프로세서를 사용하는 PC환경에서는 리틀엔디안->빅엔디안 또는
빅엔디안->리틀엔디안 변경 처리를 잘 해주어야만 한다.
(htonl, ntohl, inet_addr 등 주로 사용)



2. 리틀엔디안

- 주로 Intel 프로세서 계열에서 사용하는 바이트 오더
- 메모리 시작 주소에 하위 바이트부터 기록

ex)4바이트(32bit)값
 
0x01020304를 리틀엔디안 순서로 메모리에
입력되는 과정을 보면 다음과 같다.
 






=> 그림을 보면 네모 한칸이 각각 메모리 한 번지를 의미하며,
하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다.
하위주소(낮은주소) 즉, 시작 주소에 0x01020304 값 중에 가장 하위바이트인 0x04를 넣어주고 그 다음 상위바이트로 올라가면서 다음 주소번지에 값을 채워넣는다.
 











728x90