STM32 main함수 실행하기전 까지의 동작정리 (개인 보관 공부용)

살캉쿠·2023년 4월 18일
0
post-thumbnail

동작 과정


대략적인 동작 과정 요약

  1. MCU에 전원이 인가되면 Flash Memory에서 Stack Pointer를 초기화한다. Stack Pointer는 특정 값들을 임시저장을 위한 용도로 사용되는데, C 언어에서 파라메터를 넘기거나 함수안에 정의된 로컬변수들을 사용할 때 이용하므로 Stack Pointer 초기화 없이 C함수 호출하면 안된다.

  2. 하드웨어에서 Reset 주소값으로 Program Counter를 초기화한다. 즉, Reset 주소로 점프한다고 보면 된다.그러므로 MCU Power ON이 되면 startup 코드의 Reset_Handler함수가 가장 먼저 실행된다.

  3. startup 코드에서 .data(초기화 값이 있는 전역변수나 static 변수) 및 .bss(초기화 값이 없는 전역 변수나 static 변수) 초기화한다

  4. startup 코드에서 .data, .bss 초기화 이후 SystemInit()함수를 실행한다. 기본적으로 Clock 관련된 레지스터를 초기화한다.

  5. startup 코드에서 Newlib 라이브러리에서 __libc_init_array()함수를 실행한다. C++의 클래스 생성자를 위한 초기화 코드를 부르는 영역이다.(C언어만 사용할 시 호출하지 않아도 된다.)

  6. startup 코드에서 main 함수를 실행한다.


  • ('MCU 펌웨어 만들기 - 스타트업 코드|작성자 바람' 참고)

0개의 댓글