뱅크된 프로그램의 뱅크에 상수 데이터 저장

기술노트 27661

아키텍처:

8051

컴포넌트:

linker

업데이트:

2021-06-27 오전 8:19

소개

IAR C/C++ Compiler for 8051는 C 소스에서 생성된 코드의 뱅킹(banking)만 지원합니다. 즉, 세그먼트 CODE와 뱅크 전환은 데이터 액세스가 아닌 C 함수를 호출할 때만 가능합니다. 하지만 툴이 확실하고 관리할 수 있다고 생각한다면 데이터에 액세스할 때 뱅크 전환이 필요하지 않다는 것을 알 수 있습니다. 이 작업은 코드와 해당 코드가 액세스하는 상수 데이터를 동일한 뱅크에 저장함으로써 수행됩니다.

다음 단계를 수행:

  1. 동일한 C 소스 모듈에서 상수에 액세스할 수 있는 함수를 가진 상수를 선언합니다.
  2. #pragma memory=constseg(CONST1) 사용하여 세그먼트 CONST1 상수 변수(const vars) 배치합니다. 참고. 상수 문자열은 #pragma 함께 배치할 없습니다. 대신 컴파일 XLIB 사용하여 현재 모듈의 CSR 세그먼트 이름을 CSTR1 변경하십시오.

  3. -RCODE1 옵션과 함께 소스를 컴파일하여 코드 세그먼트 이름을 CODE1로 합니다.
  4. CONST1, CODE1을 CONST2, CODE2 등으로 늘려야 하는 각 모듈에 대해 2~3단계를 반복합니다.
  5. 프로그램을 평소처럼 링크하되, 모든 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년에 작성되었습니다. 상기 구현 세부 정보 중 일부가 그 이후로 변경되었을 수 있습니다.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.