뱅크된 프로그램의 뱅크에 상수 데이터 저장
기술노트 27661
아키텍처:
8051
컴포넌트:
linker
업데이트:
2021-06-27 오전 8:19
소개
IAR C/C++ Compiler for 8051는 C 소스에서 생성된 코드의 뱅킹(banking)만 지원합니다. 즉, 세그먼트 CODE와 뱅크 전환은 데이터 액세스가 아닌 C 함수를 호출할 때만 가능합니다. 하지만 툴이 확실하고 관리할 수 있다고 생각한다면 데이터에 액세스할 때 뱅크 전환이 필요하지 않다는 것을 알 수 있습니다. 이 작업은 코드와 해당 코드가 액세스하는 상수 데이터를 동일한 뱅크에 저장함으로써 수행됩니다.
다음 단계를 수행:
- 동일한 C 소스 모듈에서 상수에 액세스할 수 있는 함수를 가진 상수를 선언합니다.
-
#pragma memory=constseg(CONST1) 를 사용하여 세그먼트 CONST1에 상수 변수(const vars)를 배치합니다. 참고. 상수 문자열은 #pragma와 함께 배치할 수 없습니다. 대신 컴파일 후 XLIB를 사용하여 현재 모듈의 CSR 세그먼트 이름을 CSTR1로 변경하십시오.
- -RCODE1 옵션과 함께 소스를 컴파일하여 코드 세그먼트 이름을 CODE1로 합니다.
- CONST1, CODE1을 CONST2, CODE2 등으로 늘려야 하는 각 모듈에 대해 2~3단계를 반복합니다.
- 프로그램을 평소처럼 링크하되, 모든 CONSTn이 CODEn과 동일한 뱅킹에 있도록 뱅킹 옵션을 변경하십시오. 다음을 사용하여 수행할 수 있습니다 -b(CODE)CONST1,CODE1:CONST2,CODE2: ... : CODE = ......
" : " 는 뱅크를 전환하는 데 사용됩니다. IAR Linker 및 Library Tools Reference Guide를 참조하십시오. 물론 CONSTn, CODEn 여러 쌍이 동일한 뱅크에 들어갈 수 있지만 맵 파일을 확인하여 뱅크를 효율적으로 사용할 수 있는지 확인해야 합니다.
주의
본 기술 노트는 IAR Embedded Workbench for 8051 버전 7.20이 출시된 2005년에 작성되었습니다. 상기 구현 세부 정보 중 일부가 그 이후로 변경되었을 수 있습니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.