Keil RTX RTOS 구성 파일에서 사용자는 기본 사용자 스레드 스택 크기를 구성 할 수 있습니다. 일반적으로 스택에는 자동/로컬 변수가 있습니다. "ZI 데이터"섹션에는 초기화되지 않은 전역 변수가 있습니다.Keil RTX RTOS 스레드 스택 크기
RTX 구성 파일에서 사용자 스레드 스택 크기를 변경하면 스택 크기가 증가하고 "ZI 데이터"섹션 크기가 증가하지 않습니다.
나는 그것을 테스트하고, 테스트 결과는 내가 사용자 스레드 스택 크기를 증가 시킨다는 것을 보여준다. "ZI 데이터"섹션 크기가 동일한 크기와 동 기적으로 증가합니다.
내 테스트 프로그램에는 6 개의 스레드가 있고 각각 600 바이트 스택이 있습니다. Keil을 사용하여 프로그램을 빌드하면 다음과 같이 표시됩니다.
Code (inc. data) RO Data RW Data ZI Data Debug 36810 4052 1226 380 6484 518461 Grand Totals 36810 4052 1226 132 6484 518461 ELF Image Totals (compressed) 36810 4052 1226 132 0 0 ROM Totals ============================================================================== Total RO Size (Code + RO Data) 38036 ( 37.14kB) Total RW Size (RW Data + ZI Data) 6864 ( 6.70kB) Total ROM Size (Code + RO Data + RW Data) 38168 ( 37.27kB)
그러나 각 스레드 스택 크기를 800 바이트로 변경 한 경우 Keil은 다음과 같이 나를 보여줍니다 :
============================================================================== Code (inc. data) RO Data RW Data ZI Data Debug 36810 4052 1226 380 7684 518461 Grand Totals 36810 4052 1226 132 7684 518461 ELF Image Totals (compressed) 36810 4052 1226 132 0 0 ROM Totals ============================================================================== Total RO Size (Code + RO Data) 38036 ( 37.14kB) Total RW Size (RW Data + ZI Data) 8064 ( 7.88kB) Total ROM Size (Code + RO Data + RW Data) 38168 ( 37.27kB) ==============================================================================
"ZI 데이터"섹션 크기가 6484에서 7684 바이트로 증가합니다. 7684 - 6484 = 1200 = 6 * 200. 그리고 800 - 600 = 200. 그럼 스레드 스택이 "ZI 데이터"섹션에 놓여있는 것을 볼 수 있습니다.
내 질문은 : 는 스레드 스택에 넣을 때 "ZI 데이터"섹션을 RAM에 자동/스레드 로컬 변수는, "ZI 데이터"섹션에 배치됩니다 의미합니까? 사실이라면 스택 섹션이 전혀 없다는 의미입니다. "RO/RW/ZI 데이터"및 힙 섹션 만 있습니다.
이 기사는 다른 대답을 제공합니다. 그리고 나는 지금 그것에 대해 약간 혼란 스럽습니다. https://developer.mbed.org/handbook/RTOS-Memory-Model
_ "스택은 자동/로컬 변수를 보유하고 있습니다"_ - 실행중인 스레드의 관점에서 볼 때 "스택"입니다. 하지만 그 스택이 OS의 관점에서 볼 때 정적으로 할당 된 변수가 될 수는 없습니다. 당신은 단지 여기에 관찰을 제시했습니다. 특정 질문은 무엇입니까? – Notlikethat