Custom Flash Loader 디버깅하기

기술노트 201118

아키텍처:

Arm

컴포넌트:

debugger

업데이트:

2021-05-18 오전 9:25

소개

커스텀 flash loader를 생성하는 것은 까다로운 작업일 수 있습니다. 일반적인 방법으로 flash loader 액티비티(activity)를 디버깅하는 것은 어렵기 때문입니다. (기술노트 200214 를 통해 flash loader 액티비티를 로깅(logging)하는 방법에 대해 살펴보세요) 본 기술 노트는 개발 중인 flash loader를 디버깅하는 다른 방법에 대해 설명합니다.

커스텀 flash loader를 개발하는 방법에 대한 자세한 정보는 Flash Loader Development Guide 를 참조하세요: $TOOLKIT_DIR$\doc\FlashLoaderGuide.ENU.pdf.

논의

커스텀 flash loader를 개발하는 동안, flash loader 액티비티(activity)를 디버그 하기 위해 semihosting printf를 사용하는 것이 가능하다. 일반적인 방법은:

  1. flash loader 프로젝트를 semihosting printf를 사용하며 빌드한다.
  2. Terminal I/O 로그 파일을 생성하도록 응용프로그램 프로젝트를 설정한다.

Instructions

이 예제에선 STM32F429II-ACA board는 I-jet 디버그 프로브와 함께 사용된다. 

flash loader 프로젝트를 semihosting printf를 사용하며 빌드한다.

  1. flash loader 워크스페이스를 연다. $TOOLKIT_DIR$\src\flashloader (본 예시에서는 ST\FlashSTM32F4xx)
  2. 올바른 설정파일을 연다. (본 예시에서는 FlashSTM32F4xxRAM192K_Dual)
  3. Project > Options > General Options > Library Configuration > stdout/stderr: Via semihosting 를 선택한다.

  4. __iar_data_init3 호출과 printf 구문을 FlashInit 함수 최상단에 다음과 같이 추가한다:
    __iar_data_init3(); // Required to initialize .bss
    parallelism = 1;
    blankcheck = 0;
    printf("Hello! World\n\n");
    printf("image_size:%d\n\n", image_size);
  5. 만약 다음과 같은 링커 에러 메시지가 발생한다면 [Lp005]: placement includes a mix of sections with content and sections without content, 링커 설정 파일을 수정해야 합니다.
      *  do not initialize { zi } 또는
        do not initialize { section .bss }을 주석처리 합니다.
      * 다음의 문장이 없다면, initialize by copy { readwrite } 을 추가합니다.
  6. $TOOLKIT_DIR$\config\flashloader에 flash loader .out 파일을 빌드하고 교체합니다. (본 예시에서는 ST 폴더)

Terminal I/O 로그 파일을 생성하도록 응용프로그램 프로젝트를 설정한다.

flash loader printf 출력결과는 Terminal I/O 창에 보이지 않습니다. 그러나 Terminal I/O 로그 파일에 기록됩니다.

  1. Help > Information Center > Example Projects 에서 STM32F429II-ACA LightEffects project 를 엽니다.

  2. I-jet이나 다른 하드웨어 디버그 프로브로 디버그 세션이 실행되지 않도록 하기위해, 임시로 디버거 드라이버를 시뮬레이터(Simulator)로 변경합니다. (커스텀 flash loader 문제 때문에) : Project > Options > Debugger > Setup>Driver: Simulator

  3. Project > Download and Debug을 선택하여 디버그 세션을 시작합니다.

  4. Debug > Logging > Set Terminal I/O Log File을 선택하여 Terminal I/O 로그 파일을 활성화 합니다.


  5. 디버그 세션을 종료한 뒤, 디버거 드라이버를 다시 I-jet으로 변경합니다: Project > Options > Debugger > Setup>Driver: I-jet

  6. Project > Download and Debug 을 선택하여 새로운 디버그 새션을 시작합니다.

  7. 이제 Flash loader printf 출력물은 Terminal I/O 로그파일에 기록됩니다.

결론

커스텀 flash loader 개발에서 디버깅과 세부사항 로깅(logging)시 semihosting printfTerminal I/O 로그파일이 유용합니다.

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

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