인터럽트 지연시간 계산기
클럭 속도, 예외 진입/복귀 사이클 수, 추가 ISR 오버헤드, 시스템 다른 곳에서의 인터럽트 비활성화 시간으로 워스트케이스·베스트케이스 인터럽트 응답 시간을 계산하세요.
ARM Cortex-M 참조 수치
이 수치들은 Armv7-M 아키텍처 문서에서 가져온 것으로 Cortex-M3, M4, M7 코어가 0 wait-state 메모리에 접근하는 경우에 적용됩니다. 실제 시스템은 클럭이 높아지면 플래시 wait-state가 추가되는 경우가 많아 이 기준값보다 실제 지연시간이 더 클 수 있습니다.
| 코어 | 예외 진입 | Tail-chaining | 예외 복귀 |
|---|---|---|---|
| Cortex-M3 / M4 / M7 (ARMv7-M) | 12 cycles | 6 cycles | 10 cycles |
Tail-chaining은 ISR이 리턴되자마자 대기 중인 새 인터럽트를 바로 처리할 때 적용되며, 레지스터가 이미 준비되어 있어 스택 푸시를 건너뜁니다. 더 높은 우선순위의 인터럽트가 진입 단계 중에 뒤늦게 도착하면 낮은 우선순위 인터럽트의 진입 단계 중에 먼저 처리된 뒤 그 인터럽트로 tail-chain되어, 워스트케이스 지연시간이 일정 범위 내로 유지됩니다.
인터럽트 지연시간이 실제로 측정하는 것
인터럽트 지연시간은 인터럽트가 발생한 시점부터 해당 핸들러의 첫 명령이 실행되기까지의 시간입니다. Cortex-M 코어에서는 레지스터를 자동으로 스택에 저장하고 벡터를 가져오는 고정된 사이클 수가 대부분을 차지하기 때문에, ARM은 이를 가변적인 소프트웨어 지연이 아니라 작고 결정론적인 사이클 수로 문서화합니다.
평균보다 워스트케이스가 더 중요한 이유
실시간 시스템은 평균이 아니라 매번 데드라인을 지켜야 하므로 중요한 건 워스트케이스입니다: 코드 다른 곳의 크리티컬 섹션이 인터럽트를 비활성화할 수 있는 최대 시간에, ISR이나 RTOS가 실제 애플리케이션 코드의 첫 줄이 실행되기 전에 추가하는 소프트웨어 오버헤드를 더한 값입니다.
플래시 wait-state 등 실제 환경에서 추가되는 요소
Armv7-M의 진입/복귀 사이클 수치는 0 wait-state 메모리 접근을 가정합니다. 많은 마이크로컨트롤러는 특정 클럭 이상에서 플래시 wait-state를 추가하고, RAM이 아닌 플래시에서 실행되는 코드는 추가 지연이 생길 수 있습니다. 사용 중인 장치의 데이터시트에 목표 클럭에서의 wait-state가 명시되어 있다면, 그 시간을 인터럽트 비활성화 항목에 반영하면 더 현실적인 워스트케이스를 얻을 수 있습니다.
FAQ
12사이클이 모든 ARM Cortex-M 칩의 인터럽트 지연시간인가요?
아니요. 12사이클은 0 wait-state 메모리를 가정한 Cortex-M3, M4, M7 코어의 Armv7-M 아키텍처 수치입니다. 실제 실리콘은 플래시 wait-state, 버스 구조, 캐시 동작에 따라 사이클이 추가될 수 있으므로, 특정 칩에 대한 보장값이 아니라 현실적인 예산을 세우기 위한 기준값으로 봐야 합니다.
Tail-chaining이 무엇이고 왜 지연시간을 줄여주나요?
Tail-chaining은 현재 ISR이 리턴될 때 이미 다른 인터럽트가 대기 중인 경우 발생합니다. 레지스터가 이미 올바른 위치에 있으므로 예외 리턴과 재진입 스택 작업을 건너뛰어, 약 12사이클이던 비용을 약 6사이클로 줄여줍니다.
인터럽트 비활성화 시간 항목에는 무엇을 넣어야 하나요?
코드베이스 어디에서든 인터럽트가 마스킹되는 가장 긴 시간, 예를 들어 공유 버퍼를 보호하는 크리티컬 섹션 내부의 시간입니다. 실제 애플리케이션에서는 이것이 고정된 하드웨어 진입 비용보다 워스트케이스 지연시간에 훨씬 크게 기여하는 경우가 많습니다.
클럭 속도가 높을수록 실제 인터럽트 지연시간도 항상 줄어드나요?
고정 사이클 하드웨어 진입 비용에 대해서는 그렇습니다. 클럭이 빠를수록 동일한 사이클 수에 해당하는 시간이 줄어듭니다. 하지만 전체 워스트케이스 지연시간에는 비활성화 시간과 소프트웨어 오버헤드도 포함되는데, 이는 사이클이 아니라 마이크로초 단위로 정해지는 경우가 많아 비례해서 줄어들지 않을 수 있습니다.
이 계산기가 특정 마이크로컨트롤러를 모델링하나요?
아니요. 사용자가 입력한 사이클 수와 클럭 속도로 지연시간을 계산하며, ARMv7-M 아키텍처 수치가 시작값으로 미리 채워져 있을 뿐입니다. 실제 하드웨어에 맞는 정확한 결과를 얻으려면 직접 측정한 값이나 데이터시트 값을 입력하세요.