스택, 힙, 캘리브레이션용 RAM,
다른 변수와 배치 가능한 공간
이 전체가 빈 공간이라는 뜻은 아닙니다.
김도현 연구원은 “이 주소부터 놓아라”를 “DSPR0 안에서 자리를 찾아라”로 바꿨습니다.
DSPR0 = CPU0의 작업용 RAM · 링커 = 변수와 코드를 메모리에 배치하는 빌드 도구
DSPR0는 총 192KB입니다. BSW BSS는 0x7002C000부터 시작하도록 고정했습니다. 그 주소부터 RAM 끝까지는 16KB입니다.
스택, 힙, 캘리브레이션용 RAM,
다른 변수와 배치 가능한 공간
이 전체가 빈 공간이라는 뜻은 아닙니다.
링커가 이미 배치한 영역을 피해서
연속된 공간을 찾습니다.
주소 고정 해제 ≠ RAM 용량 증가
개념도이며 높이는 용량 비례가 아닙니다. 오른쪽 점선 상자는 실제 배치 위치가 아닙니다. 새 MAP 파일의 주소는 확인하지 않았습니다. KB는 1,024바이트 기준입니다.
기존 BSW 그룹에 size=16k가 적힌 것은 아닙니다. 시작점이 끝에서 16KB 앞에 있으므로, 그 위치에서 연속으로 커질 수 있는 공간이 제한됩니다.
아래는 원리를 설명하는 가상 예시입니다. 슬라이더 값은 실제 BSW·ASW 사용량이 아닙니다.
12KB는 끝부분 16KB보다 작습니다. 다른 점유가 없다고 가정한 계산입니다.
DSPR0 안에 12KB가 연속으로 남아 있다면 배치할 수 있습니다. 빈 공간을 모두 합친 크기만으로는 판단할 수 없습니다.
기존 run_addr=0x7002C000 변경 run_addr=mem:mpe:dspr0
컴파일 에러를 풀었을 것으로 보는 핵심 변경입니다. 실제 에러 원문이 없어 정확한 발생 원인은 확정하지 않았습니다.
UNINIT_DATA_BSW 그룹에 추가: select ".bss.ARS_Top*.*";
기존에도 아래의 .bss.*.* 규칙이 이 변수를 받았습니다. 이번에는 받을 그룹을 앞쪽 BSW 그룹으로 바꿨습니다.
그룹에 contiguous가 있어 함께 들어갈 연속 공간이 필요합니다. 별도 그룹으로 분리하는 것은 향후 배치 선택입니다.
BSS = 보통 시작할 때 0으로 초기화하는 변수 영역. 그룹 이름의 UNINIT만 보고 “초기화하지 않는다”고 판단하면 안 됩니다.
조회한 BSW 코드에는 0x7002C000에 변수가 있어야 한다는 직접 주소 참조가 없었습니다. 캘리브레이션 오버레이, 스택, 힙의 기존 배치 선언도 유지됩니다.
김 연구원은 변경 후 컴파일이 통과했다고 보고했습니다. 이번 자료는 XML과 LSL 두 파일이며, 실제 변수의 새 주소와 남은 RAM 양은 포함되어 있지 않습니다.
0x7000E000~0x7000FFFF는 기존 프로젝트의 사용 금지 기준입니다. 첨부 설정에는 이 구간을 명시적으로 예약한 선언이 없습니다.
하지만 확인한 부트 소스의 FLSLOADERRAMCODE 배치는 mem:psram0입니다. 따라서 “현재 플래시 코드가 그 8KB에 반드시 놓인다”거나 “이번 변경이 그 영역을 침범했다”고 소스만으로 단정할 수 없습니다.
기존 사용 금지 기준은 유지하되, 현 배포본에서의 사용 근거는 미확인입니다. 자동 배치 자체의 결함과 이 기존 제약을 구분해야 합니다.
조회한 ASW 링커 소스 기준. 일부 배치 선언만 표시합니다. 누락된 구간을 모두 빈 RAM으로 해석하면 안 됩니다.
| 영역 | 시작 주소 | 크기 / 의미 |
|---|---|---|
| 전체 DSPR0 | 0x70000000 | 192KB |
| CPU0 / CPU1 CSA | 0x70004000 / 0x70005000 | 각 4KB · 실행 문맥 저장 |
| 초기값 있는 변수 그룹 | 0x70006000 | 내부 측정 변수 구역 8KB + 기타 .data |
| 기존 사용 금지 기준 | 0x7000E000 | 8KB · 현 소스의 명시적 예약 없음 |
| 플래시 상태 변수 예약 | 0x70010000 | 48바이트 |
| CAN / SENT 변수 | 0x70010400 | 3KB |
| CPU0 인터럽트 스택 | 0x70011C00 | 1KB |
| CPU0 사용자 스택 | 0x70012000 | 72KB |
| 캘리브레이션 오버레이 RAM | 0x70024000 | 16KB · 이번 수정에서 그대로 |
| CPU0 힙 | 0x70028000 | 16KB |
| 기존 BSW BSS | 0x7002C000 | 끝까지 16KB · 이번 수정에서 고정 해제 |
| BswTest 변수 별도 배치 | 0x90000008 | DSPR0 밖 DLMU · 그대로 |
수신 자료: ARS-197.xml, TC364_GINT.lsl · 2026-10-15
비교 소스: origin/branch_20260917_MJKIM_012_2c-2 @ ebaf456ae39f2975b069c7255b7ba9f3ece57552 · 커밋 날짜 2026-09-18. M4에 보관된 Git 참조를 읽었습니다. 현재 원격 최신 여부는 확인하지 않았습니다.
linkfile_TC364/TC364_GINT.lsl:417,447: 변경 두 곳. 나머지는 줄바꿈 제외 동일.linkfile_TC364/tc36x_rev3.lsl:121–144,329–339,573–595: RAM 크기, 스택, 힙, 주소 매핑.OverlayManager.h:30: 오버레이 RAM은 링커 심볼 참조.Lcf_Tasking_Tricore_Tc.lsl:785–787: 플래시 실행 코드는 PSPR 배치.소스 정적 비교만 수행했습니다. 빌드·실기시험은 이 설명의 범위에 포함하지 않았습니다.