STM32 개발하면서 IAR workbench for ARM compiler를 사용하면서 code size가 커지다 보면
Output image의 address 값이 깨지는 경우가 생긴다.
예를 들자면!
STM32의 Bootloader 영역으로 0x08000000~ 0x08004000 번지를 설정하고
Application 영역으로 0x08005000 ~ 0x0800FFFF까지 설정하였다고 가정하여 보자.
Bootloader를 compile하여 download하고 다음으로 Application image 역시 compile하여
download를 해보게 된다.
이 때 stm32xxxxxx.h file 내에 define된 FLASH_BASE 값을 application start address로 설정해 주고
IAR도 option - Linker에서 application의 start address를 설정하여 compile 진행하면 된다.
여기까지 진행하고 Application을 compile하고 다운로드 하면 처음에는 별 문제가 없을 수 있다.
그러나 Application image가 커질수록 문제가 생기는 경우가 있는데 compile 완료된 hex file을 편집기로 열어보면
아래와 같이 5000번지 부터 시작해야하는 image 주소가 0000부터 시작하는 경우가 생긴다.
이는 Linker Option에서 Memory Regions 설정에 따른 오류로 보인다.
Memory Regions라서 Flash 전체 주소로 생각하고 Start값은 0x08000000, End값은 0x0800FFFF로 기본값을 사용했는데,
IAR의 의도는 전체 Flash 주소값이 아닌 현재 compile할 image가 사용하게될 주소 범위를 요구하는 듯 하다.
아래와 같이 Start를 0x08005000으로, End는 0x0800FFFF로 설정 후 다시 compile해보면 출력물인 hex file의 start 주소가 정상적으로 5000번지부터 시작되는것을 확인할 수 있다.