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를 사용하는 것이 가능하다. 일반적인 방법은:
- flash loader 프로젝트를 semihosting
printf
를 사용하며 빌드한다. - Terminal I/O 로그 파일을 생성하도록 응용프로그램 프로젝트를 설정한다.
Instructions
이 예제에선 STM32F429II-ACA board는 I-jet 디버그 프로브와 함께 사용된다.
flash loader 프로젝트를 semihosting printf를 사용하며 빌드한다.
- flash loader 워크스페이스를 연다.
$TOOLKIT_DIR$\src\flashloader
(본 예시에서는ST\FlashSTM32F4xx
) - 올바른 설정파일을 연다. (본 예시에서는
FlashSTM32F4xxRAM192K_Dual
) - Project > Options > General Options > Library Configuration > stdout/stderr: Via semihosting 를 선택한다.
__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);
- 만약 다음과 같은 링커 에러 메시지가 발생한다면 [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 }
을 추가합니다. $TOOLKIT_DIR$\config\flashloader
에 flash loader .out 파일을 빌드하고 교체합니다. (본 예시에서는 ST 폴더)
Terminal I/O 로그 파일을 생성하도록 응용프로그램 프로젝트를 설정한다.
flash loader printf 출력결과는 Terminal I/O 창에 보이지 않습니다. 그러나 Terminal I/O 로그 파일에 기록됩니다.
- Help > Information Center > Example Projects 에서 STM32F429II-ACA LightEffects project 를 엽니다.
- I-jet이나 다른 하드웨어 디버그 프로브로 디버그 세션이 실행되지 않도록 하기위해, 임시로 디버거 드라이버를 시뮬레이터(Simulator)로 변경합니다. (커스텀 flash loader 문제 때문에) : Project > Options > Debugger > Setup>Driver: Simulator
- Project > Download and Debug을 선택하여 디버그 세션을 시작합니다.
- Debug > Logging > Set Terminal I/O Log File을 선택하여 Terminal I/O 로그 파일을 활성화 합니다.
- 디버그 세션을 종료한 뒤, 디버거 드라이버를 다시 I-jet으로 변경합니다: Project > Options > Debugger > Setup>Driver: I-jet
- Project > Download and Debug 을 선택하여 새로운 디버그 새션을 시작합니다.
- 이제 Flash loader printf 출력물은 Terminal I/O 로그파일에 기록됩니다.
결론
커스텀 flash loader 개발에서 디버깅과 세부사항 로깅(logging)시 semihosting printf 와 Terminal I/O 로그파일이 유용합니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.