| |||
| Home > 스캐터 로딩 설명 파일의 형식적 구문 > 스캐터 파일의 식 평가 > 예제 | |||
Example 3.6. 식 측면에서 최대 크기 지정
LR1 0x8000 (2 * 1024)
{
ER1 +0 (1 * 1024)
{
*(+RO)
}
ER2 +0 (1 * 1024)
{
*(+RW +ZI)
}
}
Example 3.7. 실행 영역 차례로 배치
LR1 0x8000
{
ER1 0x100000
{
*(+RO)
}
}
LR2 0x100000
{
ER2 (ImageLimit(ER1)) ; Place ER2 after ER1 has finished
{
*(+RW +ZI)
}
}
Example 3.8. 기호 존재 조건에 따라 기본 주소 지정
LR1 0x8000
{
ER1 (defined(version1) ? 0x8000 : 0x10000) ; Base address is 0x8000
; if version1 is defined
; 0x10000 if not
{
*(+RO)
}
ER2 +0
{
*(+RW +ZI)
}
}
Example 3.9에서는 사전 처리기
매크로 및 식의 조합을 사용하여 페이지 경계에서 조밀하게 패킹된 실행 영역을 실행 주소에 복사합니다. ALIGN 스캐터
로딩 키워드를 사용하면 ER2 및 ER3의 로드
주소와 실행 주소가 정렬됩니다.
Example 3.9. 실행 공간과 조밀하게 패킹된 로드 공간에서 기본 주소 정렬
#! armcc -E
#DEFINE START_ADDRESS 0x100000
#DEFINE PAGE_ALIGNMENT 0x100000
#DEFINE MY_ALIGN(address, alignment) ((address +
(alignment-1)) AND ~(alignment-1))
LR1 0x8000
{
ER0 +0
{
*(InRoot$$Sections)
}
ER1 START_ADDRESS
{
file1.o(*)
}
ER2 MY_ALIGN(ImageLimit(ER1), PAGE_ALIGNMENT)
{
file2.o(*)
}
ER3 MY_ALIGN(ImageLimit(ER2), PAGE_ALIGNMENT)
{
file3.o(*)
}
}
Example 3.10. ScatterAssert를 사용하여 여러 영역의 크기 검사
LR1 0x8000
{
ER0 +0
{
*(+RO)
}
ER1 +0
{
file1.o(+RW)
}
ER2 +0
{
file2.o(+RW)
}
ScatterAssert((LoadLength(ER1) + LoadLength(ER2)) < 0x1000)
; LoadLength is compressed size
ScatterAssert((ImageLength(ER1) + ImageLength(ER2)) < 0x2000)
; ImageLength is uncompressed size
}
ScatterAssert(ImageLength(LR1) < 0x3000) ; Check uncompressed size of LoadRegion