MDSTECH
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객지원
뉴스레터
Q&A
FAQ
원격지원
검색창
검색버튼
회원가입
로그인
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객 지원
뉴스레터
Q&A
FAQ
원격지원
사이트맵 보기
TASKING 링커 스크립트를 활용한 메모리 맵핑 문서 원본 보기
←
TASKING 링커 스크립트를 활용한 메모리 맵핑
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게만 가능합니다:
사용자
문서의 원본을 보거나 복사할 수 있습니다:
<p>TASKING 링커 스크립트를 활용한 메모리 맵핑</p> <p> </p> <p>SW개발 시 flash나 ram 메모리를 효율적으로 사용하기 위해서 코드나 데이터를 어떻게 사용할 것인지 미리 계획하고 메모리 로케이션 룰을 링커를 통해 지정하게 된다.</p> <p>이 문서에서는 AURIX TC277 target을 예제로 섹션들을 원하는 주소로 맵핑 하는 방법에 대해 소개한다.</p> <h3> <span style="font-size: 1.17em;">링커 스크립트 구조</span></h3> <p>TASKING 컴파일러에서 프로젝트 생성시 기본적으로 생성되는 링커 스크립트는 프로젝트명.lsl 로 생성된다. 또한 TASKING 설치 후 제공되는 링커 파일(TASKING 설치 경로\include.lsl)은 모듈화 되어 있어 프로젝트의 lsl파일에서 include하여 간단하게 사용할 수 있기 때문에 사용할 프로세서에 맞는 메모리 설정을 따로 하지 않아도 된다.</p> <p>아래와 같이 프로젝트 생성시 선택 한 프로세서에 맞게 TASKING에서 제공하는 lsl파일을 include하고 있다.</p> <p><img src="/data/wiki/2015-12-29/1451372800.jpg" alt="" /></p> <p style="text-align: left;"> <프로젝트 lsl파일에서 프로세서 lsl파일 include></p> <p>tc27x.lsl 파일에서는 프로세서에 맞는 코어, 메모리 맵, 주요 심볼의 주소, 버스 등을 지정 하고 있으며, 코어 specific한 내용의 경우 아래와 같이 따로 lsl파일로 제공되어 이를 include하여 사용한다.</p> <p><img src="/data/wiki/2015-12-29/1451372854.jpg" alt="" /></p> <h3> 메모리 맵 변경</h3> <p>tc27x.lsl 파일에 보면 메모리 맵을 프로세서에 맞게 미리 지정이 되어 있다. 프로젝트의 properties->C/C++ Build->Memory 항목을 이용하면 프로세서의 메모리 구조를 아래 그림과 같이 쉽게 파악 할 수 있다.</p> <p><img src="/data/wiki/2015-12-29/1451372879.jpg" alt="" /></p> <p><strong>Source</strong> : Memory 위치</p> <p><strong>Name</strong> : Memory 이름</p> <p><strong>Type</strong> : Memory type</p> <p><strong>Address</strong> : memory 시작 주소(cached address, not-cached address)</p> <p><strong>size</strong> : memory size</p> <p><strong>Priority</strong> : 메모리 로케이션 우선 순위</p> <p>프로세서의 메모리 맵 구조를 변경하여 사용해야 하는 경우 위 GUI를 이용하거나 링커 스크립트 파일에서 직접 메모리 맵을 수정가능 하며, GUI에서 메모리 맵 수정 시 tc27x를 기반으로 한 my_tc27x로 수정 된 사항이 프로젝트의 링커 스크립트로 자동 반영이 된다.</p> <p><img src="/data/wiki/2015-12-29/1451372892.jpg" alt="" /></p> <p><img src="/data/wiki/2015-12-29/1451372909.jpg" alt="" /></p> <p>위 스크립트 예제는 TASKING 에서 제공하는 기본 lsl파일에 설정된 onchip item들(메모리)을 프로젝트의 링커파일에서 메모리 재 지정 한 결과 이다. 이 링커 설정을 통해 pflash0메모리를 Boot_flash와 App_Flash공간으로 나누었다.</p> <p> </p> <h3>코드 섹션을 원하는 주소에 로케이션 하는 방법</h3> <p>위 에서 재 지정한 Boot_flash와 App_Flash 메모리에 원하는 함수를 각각 맵핑 하기 위해서 먼저 map파일에 생성된 함수의 섹션이름을 확인 해야 한다.</p> <p><img src="/data/wiki/2015-12-29/1451372931.jpg" alt="" /></p> <p> <소스 파일></p> <p> </p> <p><img src="/data/wiki/2015-12-29/1451372941.jpg" alt="" /></p> <p> <map 파일></p> <p> </p> <p>생성된 섹션이름을 확인 후 링커 스크립트에 위 코드가 로케이션 될 위치를 지정 해 준다.</p> <p><img src="/data/wiki/2015-12-29/1451372950.jpg" alt="" /></p> <p> <링커 파일></p> <p><strong>section_layout <memory space></strong> : memory space에 대한 섹션 레이아웃</p> <p><strong>mpe:vtc:linear </strong>: linear memory space로 모든 메모리 주소 공간에 접근 가능</p> <p><strong>group <그룹 명></strong> : 섹션들을 포함하는 그룹명과 그룹 지정</p> <p><strong>ordered</strong> : 지정된 섹션을 순차적으로 메모리에 로케이션</p> <p><strong>contiguous </strong>: 지정된 섹션을 연속적으로 메모리에 로케이션</p> <p><strong>run_addr</strong> : 지정된 섹션이 동작될 주소</p> <p><strong>mem:<코어>:<메모리 주소></strong> : 메모리->코어->메모리 주소 지정</p> <p><strong>[0x100]</strong> : 시작 주소부터 0x100 이후 주소</p> <p><strong>select “섹션명”</strong> : 그룹에 로케이션 할 섹션 지정</p> <p>위와 같이 설정 후 빌드 하면 원하는 메모리에 함수가 로케이션 된 것을 확인 할 수 있다.</p> <p><img src="/data/wiki/2015-12-29/1451373006.jpg" alt="" /></p> <p><img src="/data/wiki/2015-12-29/1451373013.jpg" alt="" /></p> <p> </p> <h3> 데이터 섹션을 원하는 주소에 로케이션 하기</h3> <p>데이터를 로케이션 하는 룰을 만들기 위해서는 생성되는 data의 type에 대해서 먼저 파악해야 한다. 아래 표는 tricore에서 생성되는 데이터의 type정보이다.</p> <p><img src="/data/wiki/2015-12-29/1451373030.jpg" alt="" /></p> <p> < data type에 따른 설명 ></p> <p>data의 경우 초기화된 data이며, bss의 경우 초기화 되지 않는 데이터를 의미한다.</p> <p>‘z’ 가 있는 섹션이름의 경우 near 데이터를 의미 하며 빠른 메모리 access가 필요한 데이터의 경우 near메모리 영역에 로케이션 하면 된다.</p> <p>near 메모리 영역 : 4GB 주소 공간을 256MB로 나눈 첫 16k size 주소로 abs18 direct access 방식으로 메모리 접근한다.</p> <p>far 메모리 영역 : 4GB 주소 공간 모두 접근 가능하며 indirect access방식으로 메모리를 접근한다</p> <p>near data(.zbss, zdata, zrodata)의 경우 컴파일러의 옵션을 통해 위에서 언급한 near 메모리 영역으로 로케이션 되도록 설정 가능하며, 지정된 size 이하 크기의 데이터를 우선하여 near 메모리로 로케이션 되도록 threshold 값을 지정하는 방법을 사용한다.</p> <p>아래는 near 메모리 로케이션 threshold를 지정하는 옵션 설정 방법이다.</p> <p><img src="/data/wiki/2015-12-29/1451373080.jpg" alt="" /></p> <p> < near data 컴파일 옵션 설정 ></p> <p>near data에 대한 기본 값은 8byte로 되어 있으며, 0으로 설정 시 near data는 생성되지 않는다.</p> <p>데이터를 원하는 메모리에 로케이션 하기 위해 유의할 사항은 데이터 type에 따라서 사용되는 메모리 space가 다르며 링커 스크립트의 section layout 설정시에도 맞춰 주어야 한다. 아래 표는 데이터 타입에 따라 어떤 space를 사용하면 되는지 확인 할 수 있다.</p> <p><img src="/data/wiki/2015-12-29/1451373111.jpg" alt="" /></p> <p> < 데이터 type별 특징 ></p> <p>아래는 초기화 되지 않는 데이터를 로케이션 하는 예제이다.</p> <p><img src="/data/wiki/2015-12-29/1451373132.jpg" alt="" /></p> <p> <소스 파일에서 데이터 선언></p> <p> </p> <p><img src="/data/wiki/2015-12-29/1451373142.jpg" alt="" /></p> <p> <링커 스크립트에서 로케이션 룰 설정></p> <p> </p> <p><img src="/data/wiki/2015-12-29/1451373154.jpg" alt="" /></p> <p> <map 파일에서 로케이션 결과 확인></p> <p> </p> <p>추가로 초기화된 데이터(.data, .rodata)타입의 경우 flash에도 함께 로케이션 되며, 초기화된 데이터의 값이 저장된다. 이 초기화 데이터가 부팅 과정에서 rom에서 ram으로 copy된다.</p> <p><img src="/data/wiki/2015-12-29/1451373178.jpg" alt="" /></p> <p> < ram copy 데이터 섹션 ></p> <p>위 캡쳐 화면을 보면 ram copy가 필요한 섹션의 경우 [ ]로 표시가 된다.</p> <p>램과 마찬가지로 flash에 로케이션 되는 섹션도 로케이션 룰을 지정 할 수 있다.</p> <p><img src="/data/wiki/2015-12-29/1451373234.jpg" alt="" /></p> <p> < ram copy 데이터 섹션의 로케이션 주소 지정></p> <p>이 경우에는 run_addr속성 대신 load_addr 속성을 사용해야 한다.</p> <p><img src="/data/wiki/2015-12-29/1451373248.jpg" alt="" /></p> <p> < 로케이션 결과 ></p>
TASKING 링커 스크립트를 활용한 메모리 맵핑
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
행위
검색
TRACE32 Dummy
TRACE32
iTSP User's Guide
aTSP User's Guide
Linux Debugging
Debugging Tips
Trace Analysis
Virtual Target
TRACE32로 바라본 ARM
TRACE32 FAQ
TRACE32 Trouble Shooting
TRACE32 Software Update
Software Revision History
DT10 / DT-Win
다운로드
DT10 Evaluation
DT-Win Evaluation
TestPoint 삽입 Error
Build Error
DT10 FAQ
도구
여기를 가리키는 문서
가리키는 글의 바뀜
특수 문서 목록
문서 정보