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 진행하면 된다.

Header File에서 Application image start address 지정
IAR Compiler Option 설정
사용하는 MCU가 맞는지 확인
Linker Option에서 Start address 설정하기
Vector Table TAB에서 .intvec start를 header와 동일값으로 설정

여기까지 진행하고 Application을 compile하고 다운로드 하면 처음에는 별 문제가 없을 수 있다.

그러나 Application image가 커질수록 문제가 생기는 경우가 있는데 compile 완료된 hex file을 편집기로 열어보면

아래와 같이 5000번지 부터 시작해야하는 image 주소가 0000부터 시작하는 경우가 생긴다.

정상 compile된 image
Compile 오류가 발생한 image

 

이는 Linker Option에서 Memory Regions 설정에 따른 오류로 보인다.

Memory Regions라서 Flash 전체 주소로 생각하고 Start값은 0x08000000, End값은 0x0800FFFF로 기본값을 사용했는데,

IAR의 의도는 전체 Flash 주소값이 아닌 현재 compile할 image가 사용하게될 주소 범위를 요구하는 듯 하다.

 

아래와 같이 Start를 0x08005000으로, End는 0x0800FFFF로 설정 후 다시 compile해보면 출력물인 hex file의 start 주소가 정상적으로 5000번지부터 시작되는것을 확인할 수 있다.

 

 

 

+ Recent posts