inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

ARM Cortex-M 프로세서 프로그래밍

s524_테일 체이닝 사례 분석(feat. 버튼키)

테일 체이닝 관련 질문 드립니다.

해결된 질문

537

김상현

작성한 질문수 62

1

강사님. 강의 잘 보고 있습니다. 감사합니다.

테일체이닝 관련 실습 진행 중 질문이 생겨 글 남깁니다.

이번엔 질문이 좀 많습니다.

최대한 잘 정리해보도록 하겠습니다.

상황 - 테일 체이닝이 발생될거라 생각되는 지점에 Breakpoint를 걸었습니다.

먼저 예상되는 상황은 EXTI0_IRQHandler 함수가 호출되기 전 스크래치 레지스터[r0-r3]와 그 외 사용되는 레지스터들이 스택에 저장될 것이라 생각됩니다.

1. 1.EXTI0_IRQHandler 함수 호출 전의 어셈블리어를 볼 수 없어 이 부분도 사실인지는 잘 모르겠습니다.

 

여기서 if(SCB->ICSR & (1<<26) ) 가 참이라면, EXTI0_IRQHandler 동작이 끝난 후 SysTick_Handler가 실행될거라 예상이 됩니다.

2. 테일 체이닝이 없다면 EXTI0_IRQHandler가 끝나고 복귀가 이뤄질 때, 먼저 저장했던 r7과 lr값을 pop한 후

EXTI0_IRQHandler 호출 전 스택에 저장한 스크래치 및 그 외 레지스터들을 pop할 것으로 생각이 됩니다.

그 후에 SysTick_Handler가 호출이 될텐데... 호출 전에 레지스터들이 스택에 먼저 push될 것이고 {r7, lr}도 push될 것이라 생각이됩니다.

테일 체이닝은 레지스터 복원없이 바로 다음 인터럽트가 실행될 수 있다고 하셨습니다.

그렇다면 위 예제에서 EXTI0_IRQHandler 끝난 후 복원없이 SysTick_Handler가 실행된다는 말인데, 제 생각엔 {r7, lr}은 복원되어야하고, 그 외 레지스터들은 따로 복원없이 실행되어야할 것 같은데 맞나요?

 

3. EXTI0_IRQHandler 호출 전 사용되는 레지스터들이 스택에 push되는게 맞다면 그것을 disassembly 창같은 것으로 확인할 수 있는 방법이 있나요?

 

4. if (SCB->SHCSR & (1<<11))에서 SHCSR의 11번째 비트는 SYSTICKACT인데, 즉 SysTick 타이머 인터럽트 동작 중에 우선순위가 더 높은 EXTI0가 발생했고, 결과적으로 SysTick_Handler가 실행되다 중단되고EXTI0_IRQHandler가 실행하여 저 구문이 실행된 것으로 이해해도 될까요?

 

많은 질문을 드려 죄송합니다.

임베디드 arm-architecture cortex

답변 1

0

김상현

갑자기 드는 생각인데 혹시 스크래치 레지스터들은 r7이 가리키는 주소에 저장되나요? 만약 그렇다면 테일 체이닝에서 복원할 때 r7은 복원을 안하는지 궁금합니다.

0

홍영기

안녕하세요. 김상현님!

제 강의를 열심히 시청해주시고 왕성하게 질문도 해주시는 김상현님을 항상 응원합니다 ^^
지금하셨던 다양한 질문의 답은 모두 영상속에 있습니다. 제가 확인해보니 아직 그 영상들을 시청하지 않으신 것으로 확인되는군요. 강의 s526_인터럽트 선점 부터 s532_익셉션 리턴 사례 분석 까지의 영상들을 시청하시면 스스로 답을 찾으실 것으로 예상합니다.

stm32cubeide 관련 문의

0

46

2

DMA 관련한 강의도 제작해주실 수 있으신가요 ?

0

95

1

그림들도 해석 할 수 있어야 하나요?

1

100

2

no-stlink

1

80

2

4개의 CPU 사이클이 필요한 이유

1

100

2

MAC으로 진행 질문드려요..

1

95

2

학습 진행 시, 사용하는 Board에 대한 문의 드립니다!

0

159

2

push pop 질문

1

190

2

STM32Fx Cortex ARM 프로그래밍 저자:홍봉조, 출판사:지식과 감성

0

242

1

CORTEX_02_ASSEMBLY 빌드시 에러

1

270

1

외부 ST Link 연결 이용한 SWD 방법

0

339

1

파이프라인과 명령어

1

327

1

명령어 fetch

0

238

1

lr 레지스터 LSB 값

1

258

1

Disassembly 창 문제

0

349

1

s702 강좌에서 사용한 technical reference manual 문서

1

325

1

s702에 원자적 Access 를 위한 BSRR 코드작성 부분에 대해서

1

271

1

s202 LED 점등 예제 실행시 에러

2

351

1

STM32F429I-DISC 보드의 펌웨어

2

394

1

제공되지 않은 강의교재

0

319

1

s524 테일체이닝 강의 질문

0

234

1

부트코드와 부트로더의 차이점

1

1525

1

메모리 맵 질문

0

280

1

xPSR 레지스터 플래그 값 및 기타 질문 드립니다.

1

862

2