2013-06-04 3 views
3

레거시 코드로 작업하고 있습니다. 그래서 스택의 시작 및 중지 주소를 정의 할 위치가 확실하지 않습니다. 환경 사양은 다음과 같습니다.임베디드 시스템에서 C로 스택 주소 범위를 정의하는 방법

OS : 무료 RTOS 컴파일러 : GCC 컴파일러 프로세서 : STM32

이 시작을 이해하고 특정 실행에 사용되는 최대 스택 범위에서 실험을 스택의 주소 을 중지하는 것입니다.

+0

[uxTaskGetStackHighWaterMark] (http://www.freertos.org/uxTaskGetStackHighWaterMark.html)은 작업이 최대 일 때 특정 작업의 스택에서 사용되지 않은 단어의 수를 반환합니다. 그게 당신이하려고하는 것에 효과가 있습니까? –

+0

Free Rtos에서 sys_thread_new() 함수를 사용하여 새 스레드를 만들면 해당 스레드 (작업)에 스택 주소 풀을 할당합니다. 그러나 알려진 값을 쓰려면 우리는 같은 주소의 시작 주소를 알아야합니다. 이것은 혼란의 한 지점으로 서 있습니다 –

+0

오케이. 내가 질문을 읽을 때, 사용 된 최대 스택 범위를 알고 싶다면 스택의 _how much_을 알고 싶었다. 그러나 스택을 사용하여 특정 주소에 쓰면 스택에 의해 쌓이지 않도록 할 수 있습니다. 나는 그것을하는 방법을 잘 모르겠습니다. –

답변

1

FreeRTOS에서는 명시 적으로 스택을 제공하지 않고 단순히 크기가 지정된 요청을 지정하기 만하면 xTaskCreate()이 스택을 동적으로 할당합니다.

FreeRTOS는 stack usage and overflow checking을 일부 지원합니다.