왜 LED는 계속 High 상태인가 2

Nitroblue 1·2025년 9월 19일
  • SysTick()함수까지는 50us마다 잘 접근하고 있는 걸 확인했다.
  • 해당 함수에서 PendSV를 강제로 트리거하는 역할을 하고 있으므로 이제 의심되는 것은 PendSV Handler.

PendSV Handler 어셈블리 코드 확인

PendSV 어셈블리 코드를 보면:
1. 첫 번째 PendSV: mrs r0, psp에서 PSP=0이므로 cbz r0, 1f로 분기하여 라벨 1:로 점프
2. 라벨 1에서: bl {switch}를 호출하여 task 0의 SP를 받음
3. 그 다음: ldmia r0!, {r4-r11}로 레지스터들을 복원하고 msr psp, r0로 PSP 설정
4. 문제: 하드웨어 프레임(r0-r3, r12, lr, pc, xpsr)이 복원되지 않음!
두 번째 PendSV에서도 비슷한 문제가 있을 듯.

  • 해결책: PendSV 어셈블리 코드에서 하드웨어 컨텍스트가 제대로 복원되도록 수정해야 함. 현재 코드는 소프트웨어 컨텍스트(r4-r11)만 처리하고 있음.

0개의 댓글