2017-01-06 2 views
-1

FreeRTOS를 조사하기 시작했고 작업 컨텍스트 저장 루틴을 살펴 보았습니다. 이 루틴은 레지스터와 스택 포인터를 저장합니다. 내 질문은 다른 스레드 스택에 대한 것입니다. 컴파일러에 의해 생성 된 푸시와 팝을 수행하는 스레드가 있으면 어떨까요? 다른 스레드의 스택을 덮어 쓰는 것이 가능하지 않습니까?마이크로 프로세서 컨텍스트 스위치

+0

에서 자주 묻는 질문에 제공됩니다. 있다면, 그렇다. 하지만 스택을 덮어 쓸 수 있다고 생각하는 이유는 무엇입니까? 거기에서 실행되는 모든 쓰레드는 컴파일러에 의해 생성 된 푸시와 팝을 가질 것입니다 ...? –

+0

하지만 특정 조건에 따라 푸시 및 팝이 발생하면 어떻게 될까요? 그런 다음 다른 스레드의 스택을 덮어 쓸 수 있습니다. – Gustavo

+0

아직도 어떻게 될지 설명하십시오. 스레드는 별도의 스택을 가지고 있는데 왜 서로 겹쳐 씁니까? 그리고이 특정 조건은 무엇입니까? –

답변

2

각 스레드는 컨텍스트 저장소에 필요한 자체 호출 스택 +에 대해 충분한 스택을 할당해야합니다. 컨텍스트 저장소에 필요한 추가 스택 공간은 대상에 따라 달라 지지만 FreeRTOS의 경우 구체적으로 상수 configMINIMAL_STACK_SIZE은 최소한 여유있는 크기 여야합니다.

스레드 스택이 인터럽트 컨텍스트에서 사용되는 일부 대상에서는 인터럽트별로 스택 사용을 고려해야합니다. 인터럽트가 중첩 가능하다면; 최악의 상황은 모든 인터럽트가 완료되기 전에 모든 인터럽트가 우선 순위 순서대로 활성화 될 때 발생합니다 - 아마도 드문 경우이지만, 고려해야 할 시나리오 일 것입니다. 당신이 무엇을 할 수있는 메모리 보호가 없다면 FreeRTOS에 대한 스택 할당에 대한

조언은 http://www.freertos.org/FAQMem.html#StackSize

관련 문제