본문 바로가기
임베디드 개발/STM32 (ARM Cortex-M)

STM32 ] Reset Sequence 이해하기

by eteo 2023. 2. 6.

 

 

모든 ARM Cortex-M based MCU는 reset 이후 다음과 같이 작동한다.

 

1. PC(Program Counter)는 0x0000 0000 값을 갖는다.

 

2. 프로세서는 0x0000 0000의 value를 읽어 MSP(Main Stack Pointer)에 넣는다.

MSP = value@0x0000 0000

즉, 프로세서가 가장 먼저 하는 일은 Stack pointer를 intialize 하는 일이다.

 

3. 프로세서는 0x0000 0004 의 value를 읽어 PC에 넣는다.

그리고 해당 value는 Reset Handler의 주소이다.

 

4. PC는 Reset Handler로 점프한다.

Reset Handler는 Application 실행을 위해 필요한 초기화를 하는 C/어셈블리어로 작성된 함수이다.

 

5. Reset Handler에서 Application의 main()함수를 호출한다.

 

 

 

 

하지만 실제로 ST사의 User Flash는 모두 0x0800 0000 주소에서 시작하고, Release 모드에서 MSP value, Reset Handler 주소, Vector talbe, Application code 모두 0x0800 0000에서 시작한다.

 

 

즉 0x0800 0000 에서 0x0000 0000을 링크하는 과정이 필요한데 그게 바로 memory aliasing이다.

 

0x0000 0000 번지가 0x0800 0000으로 맵핑되어, 프로세서가 0x0000 0000을 읽으려고하면 내부적으로 이 주소가 0x0800 0000번지로 맵핑되어 결국 0x0800 0000에 저장된 값을 읽게 된다.

 

 

 

다음 Memory Browser에서 확인해보면 0x0800 0000 번지의 값과 0x0000 0000 번지의 값이 정확히 일치하는 것을 볼 수 있다. 

 

이 중 0x0800 0000에 있는 값이 MSP value 이고 0x0800 0004에 있는 값이 Reset Handler의 주소이다.