세그먼트 ISTACK가 세그먼트 정의로는 너무 깁니다
기술노트 95811
아키텍처:
8051
컴포넌트:
linker
업데이트:
2021-06-22 오전 4:23
소개
IAR Embedded Workbench for 8051 버전 8.20 (혹은 하위 버전)에서 프로젝트를 옮겼는데, 버전 8.30에서 내부 RAM에 대한 링커 오류 e16이 갑자기 발생합니다:
Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition
설명
프로젝트를 연결하면 .xcl 링커 설정 파일이 사용됩니다. 여기에는 링커에 대한 명령이 포함되어 있습니다.
IAR Embedded Workbench for 8051에서는 Project > Options > Linker > Config > Linker configuration file을 통해 확인할 수 있습니다.
V8.30 릴리즈가 변경되어 _NR_OF_VIRTUAL_REGISTERS 기호가 더 이상 사용되지 않습니다.
링커 에러를 일으키는 것은 이 여분의 크기입니다.
해결방법
프로젝트의 .xcl 파일은 IAR Embedded Workbench for 8051 버전 8.20 (혹은 하위 버전)에서 가져온 것일 수 있으며 다음과 같은 내용이 포함되어 있습니다:
-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F
필요한 경우 파일의 새 복사본을 만들고 해당 줄을 다음으로 변경합니다:
-Z(DATA)VREG=08-7F
정확한 버전 세부정보
이 변경사항은 버전 8.30.1 (EW24413)에 구현되었으며 버전 8.30.2의 릴리즈 노트에 문서화되어 있습니다.
힌트
기술 노트 98110 에서 비슷한 문제를 다룹니다.