2013-05-27 4 views
2

마이크로 컨트롤러에서 특정 프로그램에 필요한 스택 메모리를 결정하는 방법은 무엇입니까? 예를 들어, 내부적으로 많은 서브 루틴이나 thread를 가질 수있는 프로그램이 있다고 가정 해 봅시다. 프로그램 실행을 시작하기 전에이 프로그램의 스택 크기를 수정하려고합니다. 스택의 끝점을 어떻게 표시합니까?마이크로 컨트롤러에서 스택 메모리 할당

+0

로컬 변수를 사용하지 않거나 프로젝트에서 분석을 수행하면 모든 코드 경로와 함수 당 로컬 데이터의 양을 알아야합니다. 기본적인 임베디드 프로그래밍. –

답변

3

당신은 동적 메모리 할당없이 C 언어 프로젝트에 대해 이야기하고 있다고 가정합니다. 스택 사용량의 정확한 계산은 매우 길고 복잡합니다. 적어도 각 함수와 호출 그래프 (컴파일러가이 정보를 제공 할 수 있음)에 대한 스택 사용을 알아야합니다. 게다가 : 운영 체제가 있습니까? 각 스레드는 자체 스택이 필요합니다. 인터럽트 루틴이 있습니까? 총 스택 사용량은 각 현재 실행 흐름의 기여도 합계입니다.

많은 경우 경험적 방법, 즉 스택 사용의 런타임 측정치가 더 효과적이다. 예를 들어 고정 된 패턴으로 전체 스택 영역을 채운 다음 의미있는 테스트를 실행 한 다음 "더티"영역의 크기를 확인할 수 있습니다. 실제 크기는 안전 마진 (예 : + 50 %)을 적용하여 계산할 수 있습니다.

0

스택 제한은 마이크로 컨트롤러에있는 메모리 용량에서 비롯됩니다. 수동으로 할 수 있습니다.이 프로그램은 대용량 프로그램에서 매우 귀찮고 엘프 덤프를 조사 할 수 있습니다. 거기에서 메모리가 전역 변수에 의해 점유되는 방법을 발견하고 남은 것을 스택으로 사용할 수 있습니다. 또한 필요한 최대 스택을 찾으려면 가장 긴 중첩 함수 호출과 인수 인수의 크기를 모두 찾아야합니다. 이 방법으로 미리 설정 한 최대 스택 요구 사항을 얻을 수 있습니다. 최악의 경우 스택이 더 필요하고 함수 호출과 인수의 크기를 기반으로해야하므로 몇 가지 최적화를 수행해야합니다.