10.07.2015 Views

PDF version - ARM Information Center

PDF version - ARM Information Center

PDF version - ARM Information Center

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

임베디드 소프트웨어 개발3.6 타겟 하드웨어 및 메모리 맵이 장의 이전 단원에서는 스캐터 로딩 설명 파일에서의 코드 및 데이터 배치에 대해 설명했습니다. 그러나 타겟 하드웨어 주변 기기의 위치와 스택 및 힙 한계는소스 또는 헤더 파일에 하드 코딩되어 있다고 가정했습니다. 타겟의 메모리 맵과관련된 모든 정보를 설명 파일에 배치하고 소스 코드에서 절대 주소에 대한 모든참조를 제거하는 것이 좋습니다.일반적으로 주변 기기 레지스터의 주소는 프로젝트 소스 또는 헤더 파일에 하드코딩됩니다. 주변 기기 레지스터에 매핑되는 구조체를 선언하고 이러한 구조체를 스캐터 로딩 설명 파일에 배치할 수도 있습니다.예를 들어 타겟에는 두 가지 메모리 매핑 32비트 레지스터를 사용하는 타이머 주변 기기가 있을 수 있습니다. 예제 3-8에서는 이러한 레지스터에 매핑되는 C 구조체를 보여 줍니다.예제 3-8 주변 기기 레지스터에 매핑__attribute__ ( (zero_init) ) struct{volatile unsigned ctrl; /* timer control */volatile unsigned tmr; /* timer value */} timer_regs;이 구조체를 메모리 맵의 특정 주소에 배치하려면 해당 구조체를 정의하는 모듈이 포함된 실행 영역을 만들면 됩니다. 3-24페이지의 예제 3-9에서는 timer_regs구조체를 0x40000000에 배치하는 TIMER라는 실행 영역을 보여 줍니다.이러한 레지스터의 내용은 응용 프로그램을 시작할 때 0으로 초기화되지 않아야합니다. 0으로 초기화되면 시스템의 상태가 변경될 수 있기 때문입니다. 실행 영역을 UNINIT 속성으로 표시하면 해당 영역에 있는 ZI 데이터가 __main을 통해 0으로 초기화되지 않습니다.<strong>ARM</strong> DUI 0203IK Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-23Non-Confidential

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!