해결된 질문
작성
·
304
1
안녕하세요.
이제 강의 시작한 초보 FW 개발자입니다.
S207의 SP 레지스터에 alias 관련해서 2가지 질문이 있습니다.
설명해주실 때에는 "SP 레지스터를 통해, MSP 레지스터 or PSP 레지스터가 결정된다"고 하셨는데요.
강의 자료(PDF)에는 SP 레지스터 - PSP 레지스터가 점선으로 표시되고, X 표시가 있는데, SP 레지스터는 PSP 레지스터로 alias 되는 것은 아닌가요?
바로 MSP or PSP 레지스터를 이용하면 될 것 같은데,
SP 레지스터를 통해 1단계를 더 거치는 이유가 무엇일까요?
FW 관련하여 좋은 강의해주셔서 감사드립니다!
답변 1
1
안녕하세요. SeongJin Hong님!
CORTEX-M 의 주요 특징중 하나인 특권모드 vs 비특권모드에 대하여 궁금한 점이 계시군요. :)
시스템은 부팅이후 디폴트인 특권쓰레드 환경에서 main() 함수를 실행합니다. 사용자(개발자)는 부팅 이후 이 환경을 계속 사용할 지 아니면 다른 환경(사용자 쓰레드)을 사용할 지를 선택하여야 합니다. 사실 특권쓰레드를 더 많이 사용하긴 합니다. 이 환경에서는 MSP 레지스터를 이용하여 스택 메모리를 접근 합니다. 다만, C언어에서는 스택메모리를 접근할 때 MSP 을 이용하는 것이 아닌, MSP 의 별칭(alias) 인 SP 을 이용하는 것입니다.
만일 부팅 이후에 사용자가 비특권 모드인 사용자 쓰레드에서 main() 함수를 실행시킬 수도 있는데, 그 때는 PSP 레지스터를 이용하여 스택 메모리를 접근하게 됩니다. 이후로는 SP가 더이상 MSP 을 가리키지 않고 PSP 을 가리키게 되죠.
스택메모리 접근시 MSP나 PSP 을 이용하지 않고 SP 을 이용하는 이유는 C언어에서 통일된 일관성(consistency) 있는 단일 인터페이스 제공을 목적으로 하는 것이라고 이해하시면 되고요.
제가 지금까지 간단하게 정리해드리긴 하였지만, CORTEX-M 을 처음 사용하시게 되면 이 부분이 조금 낯설고 어렵게 느껴지실 수도 있습니다. 괘념치마시고, 약간 이해가 덜 된 느낌이시더라도 계속 이어지는 강의를 정주행하시는 것을 추천드립니다. 나중에 강의 후반부인 예외처리(exception) 정도 까지 진도가 나가시면, 지금의 이 부분이 자연스럽게 이해가 되실 것입니다 ^^
하나의 통일된 인터페이스로 제공하기 위해서 별칭인 SP를 이용하는 것이군요!
아직 100% 이해하지는 못했지만, 말씀하신대로 계속 강의를 이어나가며 이해해보도록 하겠습니다!
빠른 답변 감사드립니다!