관련글 :
예제 프로젝트의 링커 커맨드 파일(.cmd)을 보면 기본적으로는 M0, M1 RAM을 스택 공간으로 지정하고 있는데, 이는 Mx RAM이 CPU와 Tightly coupled된 메모리라서 성능과 속도 면에서 최적이기 때문일 것이다.
하지만 하드웨어 제약 조건을 충족하기만 하면 다른 RAM 영역도 스택으로 사용할 수 있다.

먼저 스택 영역을 옮길 때 고려해야할 점은 C28x CPU의 스택 포인터(SP, 현재 스택의 최상단을 가르키는 레지스터)가 16비트 크기라는 점이다. 따라서 .stack 영역은 SP 레지스터가 가리킬 수 있는 주소 범위인 0x0000 ~ 0xFFFF 영역에 배치해야 한다.
즉, M0와 M1 합친 크기인 4KB(2KW)가 부족한 경우, LS0~LS5 RAM, D0~D1 RAM, GS0~GS2 RAM 영역은 스택으로 사용할 수 있고, GS3 RAM부터는 주소가 0x00010000을 넘어 스택 포인터가 가리킬 수 없으므로 스택 배치가 불가능하다.

또 다른 제약으로는 스택은 특성상 끊어지지 않는 연속된 메모리 블록으로 할당되어야 하기 때문에, Mx RAM과 Dx RAM 같은 비연속적인 두 영역을 결합하여(ex. M0RAM | D0RAM) 스택을 할당하는 것은 불가능하다.
마지막으로 링커 커맨드 파일에서 스택 배치를 옮겨서 스택 용량이 변경되었다면, Project Properties > Linker Options 에서 스택 사이즈 설정( --stack_size) 수정해 사용할 스택의 최종 크기를 지정해주어야 한다.
'임베디드 개발 > TMS320F2838x (C28x)' 카테고리의 다른 글
| CCS ] .out(ELF) 파일에서 섹션 정보 파싱하기 (0) | 2024.12.07 |
|---|---|
| TMS320F28388D ] 링커커맨드 파일과 컴파일러 섹션 (0) | 2024.08.16 |
| TMS320F28388D ] DAC 겸용 ADC 핀 사용시 주의점 (0) | 2024.08.04 |
| TMS320F28388D ] Input Qualification (0) | 2024.07.02 |
| ccs 프로젝트 빌드 과정 (0) | 2024.06.12 |