티스토리 뷰

"Near"와 "Banked" 중 어느 코드 모델(code model)을 선택 할 것인가

IAR EW8051을 사용하려고 설정하다 보면 코드와 메모리 모델이 자연스럽게 딸려 나옵니다. 먼저 코드 모델은 "Near"와 "Banked" 두 가지가 있습니다. "Near"는 banking support가 필요치 않을 때 사용되죠. 예를 들어 64KB 플래시 메모리 접근만 필요한 경우가 되겠습니다. 즉 32KB나 64KB 플래시 디바이스를 쓰는 경우이죠. 아니면 그 이상의 플래시 메모리를 쓰더라도 단지 64KB 플래시만 필요하더라도 이 코드모델을 선택합니다.

"Banked"는 128KB 혹은 256KB 플래시 전체를 접근하길 원할 때 선택하고요.


코드 모델에 따라 달라지는 데이터 모델(data model)

"Near" 코드 모델을 위한 기본 데이터 모델은 Small이고 "Banked"를 위한 건 Large입니다. 데이터 모델은 컴파일러와 링커가 variables의 저장을 위해 8051의 메모리를 어떻게 사용할 지 결정합니다. small 데이터 모델로는 variables이 일반적으로 DATA 메모리 공간에 저장됩니다. Large 데이터 모델에서는 variables이 XDATA에 저장됩니다.


어느 블로거 분의 말을 빌리자면 "IDATA는 코어 내부메모리를 사용하는 것이고 XDATA는 코어외부메모리를 사용하는 것"입니다. 두 가지의 차이는 액세스 속도에서 납니다. IDATA에 접근하는 것은 일반적으로 XDATA에 접근하는 것 보다 대단히 빠릅니다.


Banked code model을 위해서 몇가지 추가 셋팅을 해줘야 합니다. 옵션의 General Options -> Code Bank 탭 말이죠.




중요한 건..

중요한 건 8051 코어는 다양한 메모리 공간들에 접근하기 위해 다른 명령어들을 사용합니다. 만약 256KB 플래시 메모리를 사용하는 디바이스라면 banked 코드 모델과 Large 데이터 모델 조합이되겠군요. 그리고 스택은 XDATA 내에 위치 될 겁니다.

참고) 메모리는 프로그램 메모리와 데이터 메모리로 구성되고 다시 프로그램 메모리는 부트 플래시 섹션과 응용 플래시 섹션으로 나뉘어집니다. 데이터 메모리는 내부 데이터 메모리 SRAM과 외부 확장 데이터 메모리, 데이터 메모리 EEPROM이 있습니다. 내부 데이터 메모리는 프로그램에서 사용자 변수로 사용되거나 스택 영역으로 사용되기도 합니다.