IAR XLINK Linker 로 체크섬 계산

기술노트 91733

아키텍처:

All

컴포넌트:

general

업데이트:

2021-07-15 오후 9:33

소개

본 기술 노트에는 IAR Embedded Workbench로 만든 프로그램에 CRC16 체크섬을 추가하는 몇 가지 예가 나와 있습니다.

적용

본 기술 노트는 IAR XLINK 링커를 사용하는 IAR Embedded Workbench 제품에 적용됩니다. IAR ILINK 링커를 사용하는 제품에 대해서 기술 노트 11927를 참조하시기 바랍니다.

개요

  • IAR XLINK 링커에서 체크섬 계산을 구동해야 합니다.
  • 메모리 범위에 대해 IAR XLINK 링커에 알려 체크섬 계산을 하도록 합니다.
  • 프로그램의 소스 코드에 체크섬 계산 C 소스를 포함해야 합니다.

체크섬 계산에 포함되는 항목은 무엇입니까?

일반적으로: "타깃에 다운로드되어야 할 프로그램의 모든 바이트는, 체크섬 계산의 일부가 되어야 합니다."

이에 대한 정보를 얻는 가장 간단한 방법은 IAR XLINK 링커 옵션에서 "checksum calculation" + "map file"을 켜는 것입니다. 그런 다음 .map 파일의 끝을 보고 체크섬 계산에 포함할 메모리 범위를 확인합니다.

DATA는 일반적으로 체크섬 계산에 포함되지 않지만, XDATA(및 일부 다른 세그먼트 유형)는 CODE 세그먼트 유형 외에 포함될 수 있습니다. CODE가 아닌 다른 세그먼트 유형이 포함된 경우 해당 세그먼트 유형을 제외할 수 있습니다. (ARM용 IAR Embedded Workbench의 예에서는 XDATA가 체크섬 계산에 포함되지 않도록 -J 옵션이 설정되어 있습니다.)

프로그램에서 체크섬 계산

제공된 예는 CRC16 체크섬 계산을 사용하는 방법을 보여줍니다. 애플리케이션의 C 소스에서 IAR XLINK Linker가 생성하는 것과 동일한 체크섬 값을 계산하려면 실제 일반 C 소스를 추가해야 합니다. 계산에는 두 가지 변형이 있습니다:

  • Fast -- 실행 시간은 짧지만 상수 테이블에 더 많은 ROM/플래시를 사용합니다.
  • Slow -- ROM/플래시는 적게 사용하고 실행 시간은 더 많이 사용합니다.

참고 사항:

  • 체크섬 계산은 여러 범위에서 수행할 수 있습니다. 여러 범위를 사용할 경우 주소 범위가 가장 낮은 범위를 먼저 계산해야 합니다.
  • 체크섬 계산은 체크섬이 메모리에 배치된 바이트에 대해 수행해서는 안 됩니다. (한 가지 해결책은 메모리 끝에 체크섬을 배치하는 것입니다. 그렇지 않으면 응용 프로그램에서 두 가지 범위를 만들어야 합니다.) 따라서 체크섬이 저장되는 바이트(1, 2 또는 4)는 체크섬 계산에서 제외되어야 합니다.
  • 느린 함수를 사용하는 경우 체크섬에 바이트가 있는 개수만큼 값이 0x00인 체크섬 계산을 마지막으로 호출해야 합니다.

XLINK에서 수행한 체크섬 계산

이러한 옵션은 링커 명령 파일(filename .XCL) 또는 IAR Embedded Workbench IDE에서 사용할 수 있습니다.

IAR Embedded Workbench에서는 Project > Options > Linker (XLINK) > Processing에서 체크섬 계산을 설정합니다. 이 예에 해당하는 옵션은 사용되지 않은 코드 메모리 채우기(명령줄 옵션 H), 패턴 채우기(모든 패턴), 체크섬 생성(명령줄 옵션 J), 크기 = 2바이트, CRC16, 보완 = 있는 그대로, 비트 순서 = MSB 우선입니다.

명령줄(또는 .xcl 파일)에서 -J 및 -H 링커 옵션을 사용하여 체크섬을 계산합니다. -J를 사용하려면 -H 필러 바이트 옵션을 사용해야 합니다.

이 작업을 수행하려면 몇 가지 요구 사항을 충족해야 합니다.

  • 체크섬 자체가 저장된 세그먼트에 올바른 주소와 주소 범위가 있는지 확인해야 합니다.
    -Z(CODE)Checksum=1000-1001 /* 이 예에서는 2바이트 체크섬*/
  • 모든 코드 세그먼트에 대해 시작 주소와 중지 주소를 모두 정의해야 합니다.
    -Z(CODE)CODE_SEGMENT /* Wrong */
    -Z(CODE)CODE_SEGMENT=2000 /* Wrong */
    -Z(CODE)CODE_SEGMENT=2000-4FFF /* Correct */
  • 시작 주소와 중지 주소가 모두 있는 한 CODE 메모리 범위를 두 개 이상 가질 수 있습니다.
    -Z(CODE)FIRST_CODE_SEGMENT=2000-4FFF
    -Z(CODE)SECOND_CODE_SEGMENT=7000-9FFF

예제 다운로드

이러한 예에는 IAR XLINK Linker가 CRC 계산에서 생성하는 것과 동일한 체크섬 값을 계산하는 실제 일반 C 소스가 포함됩니다. 또한 IAR XLINK 링커에 대한 IAR Embedded Workbench 설정과 Checksum 세그먼트를 메모리의 적절한 위치에 배치하기 위한 수정된 .xcl 파일도 이러한 예에 포함됩니다.

자세한 정보

체크섬에 대한 자세한 내용은 XMAN.HTM 및 XLINK.PDF를 참조하십시오. 관련 지원 링크 "IAR XLINK Linker 최신 버전"에서도 파일을 다운로드할 수 있습니다.

오스트레일리아의 Rocksoft의 Mr. Ross N. Williams는 다음과 같이 썼습니다: CRC 오류 감지 알고리즘에 대한 간단한 가이드와 이 문서는 CRC explained by Mr. Ross N. Williams에서 다운로드 할 수 있습니다.

마지막으로 수석 링커 개발자가 체크섬에 대해 자세히 설명하는 기술 노트 '26457 체크섬 생성' 도 있습니다.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.