그라운드 임베디드 EN 유튜브 구독

노트 / 기계어와 어셈블리

벡터 테이블: 인터럽트 주소록

초기 스택 값과 리셋, 예외, 인터럽트 처리 함수의 주소가 차례로 놓인 표. 부트로더가 이 표를 옮기는 이유까지.

GROUND EMBEDDED · 정리 노트기계어 07벡터 테이블 1void TIM2_IRQHandler(void) { ... }// 이름이…

벡터 테이블은 Flash 맨 앞에 놓인 주소 배열입니다.

번호 내용
0 초기 스택 포인터 값
1 Reset_Handler
2 NMI_Handler
3 HardFault_Handler
… MemManage, BusFault, UsageFault, SVC, PendSV, SysTick
16~ 주변장치 인터럽트 (USART1_IRQHandler, TIM1_UP_IRQHandler …)
처음 SP 값0x00Reset0x04NMI0x08HardFault0x0C…주변장치 인터럽트들
벡터 테이블은 Flash 맨 앞에 놓인 주소 목록입니다.

연결 방식

스타트업 파일에 모든 처리 함수 이름이 weak 심볼로 정의되어 있고, 기본은 무한 루프(Default_Handler)입니다. 내 코드에서 같은 이름의 함수를 만들면 그 함수로 대체됩니다.

void TIM2_IRQHandler(void) { ... }   // 이름이 정확해야 함

이름 오타가 나면 컴파일 오류 없이 Default_Handler에 빠져 멈춥니다. "인터럽트가 걸리면 멈춘다"는 증상의 흔한 원인입니다.

벡터 테이블 옮기기 (VTOR)

부트로더의 표0x0800_0000VTOR 변경앱의 표앱 시작 주소앱의 핸들러 호출
부트로더에서 앱으로 넘어갈 때 VTOR를 앱의 벡터 테이블 주소로 바꿉니다.

부트로더가 0x0800_0000에 있고 앱이 0x0800_8000에 있다면, 앱으로 점프하기 전에 SCB->VTOR = 0x08008000;으로 CPU가 앱의 벡터 테이블을 보게 합니다. RAM에 벡터 테이블을 복사해 두고 실행 중 처리 함수를 바꾸는 기법도 있습니다.

영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSE레지스터 설정을 실제 보드에서 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →