벡터 테이블: 인터럽트 주소록
초기 스택 값과 리셋, 예외, 인터럽트 처리 함수의 주소가 차례로 놓인 표. 부트로더가 이 표를 옮기는 이유까지.
벡터 테이블은 Flash 맨 앞에 놓인 주소 배열입니다.
| 번호 | 내용 |
|---|---|
| 0 | 초기 스택 포인터 값 |
| 1 | Reset_Handler |
| 2 | NMI_Handler |
| 3 | HardFault_Handler |
| … | MemManage, BusFault, UsageFault, SVC, PendSV, SysTick |
| 16~ | 주변장치 인터럽트 (USART1_IRQHandler, TIM1_UP_IRQHandler …) |
연결 방식
스타트업 파일에 모든 처리 함수 이름이 weak 심볼로 정의되어 있고, 기본은 무한 루프(Default_Handler)입니다. 내 코드에서 같은 이름의 함수를 만들면 그 함수로 대체됩니다.
void TIM2_IRQHandler(void) { ... } // 이름이 정확해야 함
이름 오타가 나면 컴파일 오류 없이 Default_Handler에 빠져 멈춥니다. "인터럽트가 걸리면 멈춘다"는 증상의 흔한 원인입니다.
벡터 테이블 옮기기 (VTOR)
부트로더가 0x0800_0000에 있고 앱이 0x0800_8000에 있다면, 앱으로 점프하기 전에 SCB->VTOR = 0x08008000;으로 CPU가 앱의 벡터 테이블을 보게 합니다. RAM에 벡터 테이블을 복사해 두고 실행 중 처리 함수를 바꾸는 기법도 있습니다.
영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSE레지스터 설정을 실제 보드에서 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →