IELFTOOL 체크섬 - 기본 조치

기술노트 65473

아키텍처:

Arm, STM8

컴포넌트:

general

업데이트:

2021-07-22 오후 10:54

소개

본 기술 노트는 ILINK 링커를 사용하는 IAR 시스템 제품에 적용됩니다. 아래 설명은 응용 프로그램에서 CRC16 체크섬 계산을 사용하는 데 필요한 기본 작업을 설명합니다.

논의

CRC16 체크섬 계산을 사용을 시작하면 다음과 같은 기본 작업을 수행합니다:

  • 프로그램에 체크섬 계산의 CRC16 소스를 포함 및 사용합니다.
  • IAR Embedded Workbench IDE에서 Checksum 옵션을 선택합니다.

추가 논의를 위한 가정

본 기술 노트의 나머지 내용은 다음과 같이 가정합니다:

    • 가상 장치가 사용 됨. 주소 범위 0x0000 ~ 0xFFFF 의 읽기 전용 메모리를 가짐

프로그램에 체크섬 계산을 위해 CRC16 소스를 포함 및 사용합니다.

CRC16 소스를 추가할 때는 다음 작업을 고려해야 합니다:

  • 프로그램 소스에서 다음 심볼 __checksum을 사용하는지 확인
  • 참고: 응용 프로그램 소스가 __checksum 기호를 사용하지 않으면 ielftool.exe에서 오류 메시지가 표시됩니다.
The string '__checksum' was not found in the string table.

 

예제 프로젝트에서는 CRC16 체크섬 계산 사용 방법을 보여 줍니다. 응용 프로그램에서 체크섬 계산을 위해 CRC16 소스를 추가해야 합니다. 계산에는 두 가지 방법이 있습니다.

  • Fast -- 짧은 실행 시간 (상수 테이블을 위해 더 많은 ROM/flash 메모리 사용).
  • Slow -- 적은 ROM/flash 메모리 사용 (실행 시간 길어짐).

응용 프로그램의 체크섬 계산 알고리즘에 대한 중요 참고 사항입니다.

  • 체크섬 계산은 체크섬이 메모리에 저장된 바이트에 대해 수행해서는 안 됩니다(작업하려면). 따라서 체크섬이 저장된 주소 범위(1, 2 또는 4바이트)는 체크섬 계산에서 제외해야 합니다.
  • 한 가지 방법은 체크섬을 메모리의 시작 또는 끝에 저장하는 것입니다. 그래야 주소 범위를 보다 쉽게 올바르게 설정할 수 있기 때문입니다.
  • 느린 계산을 사용하는 경우 소스는 느린 체크섬 계산을 위해 추가 및 최종 호출을 수행해야 합니다. 값이 0x00이고 체크섬의 크기(1, 2 또는 4바이트)와 동일한 바이트 수로 호출합니다. 자세한 내용은 예제 프로젝트를 참조하십시오.

ielftool에서 체크섬 계산 옵션을 선택합니다.

IAR Embedded Workbench IDE에서 Project>Options>Linker>Checksum 옵션을 설정합니다. 예제 프로젝트에 사용되는 설정은 다음과 같습니다:

  • Fill unused code memory
  • Fill pattern: 0xFF (can be any pattern)
  • Start address: 0x0 (adjust to your application)
  • End address: 0xFFFB (adjust to your application)
  • Generate checksum
  • Checksum size: 2 bytes
  • Algorithm: CRC16
  • Complement: as is
  • Bit order: MSB first
  • Initial value: 0

올바른 체크섬을 생성하기 위한 요구 사항을 충족

ielftool.exe이 올바른 체크섬을 생성하도록 하려면 다음 두 가지 요구 사항을 충족해야 합니다.

  • 체크섬 값을 저장할 위치를 지정합니다.
  • 체크섬을 계산할 주소 범위를 확인합니다.

체크섬을 저장할 위치를 지정

체크섬이 저장되는 위치는 링커 구성 파일의 지시어로 제어됩니다. 다음 예에서는 메모리 끝에 체크섬을 저장합니다. 링커 설정 파일에 다음 줄을 추가합니다.

place at end of ROM_region { ro section .checksum };

체크섬 계산을 위한 주소 범위를 확인

체크섬 값이 저장된 바이트를 제외한 응용 프로그램의 모든 읽기 전용 바이트에 대해 체크섬이 계산되는지 확인합니다.

다음 단계를 적용하여 이에 대한 정보를 얻으십시오.

  1. Project>Options>Linker>List>Generate linker map file 선택
  2. Tools>Options>Messages>Show build messages>All 선택
  3. 프로그램을 한 번 빌드합니다. (이 작업은 아래 4단계와 5단계에 대한 정보를 생성하기 위해 수행됩니다.)
  4. .map파일을 확인합니다. __checksum 심벌을 검색하여 __checksum이 저장된 주소를 확인합니다.
  5. Build 창을 확인합니다. ielftool.exe의 빌드 메시지를 읽고 체크섬 계산에 사용할 메모리 범위를 가져옵니다.

예제 프로젝트

예제 프로젝트 상, 시작 주소는 다음과 같이 지정 됨:

  • 0x0 (for ARM)
  • 0x8000 (for STM8).

끝 주소는 다음과 같이 지정됨: 0xFFFB.

예제 프로젝트 링크:

결론

프로젝트에서 CRC를 사용하기 시작할 때 이 기술 노트에 설명된 조치와 주의 사항을 고려해야 합니다.

읽을 수 있는 기술 노트가 더 있습니다. 예는 다음과 같습니다:

기술 노트 11927는, 다음의 정보에 대해 작성됨:

  • ielftool.exe를 사용한 체크섬 계산에 대한 일반적인 내용
  • 체크섬 처리의 특수한 경우를 다루는 다른 기술 노트에 대한 링크입니다.

체크섬을 메모리에 저장하는 방법/장소에 대한 기타 제안사항은 기술 노트 62709에 설명되어 있습니다.

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

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