RealView ® CompilationTools 개발자 설명서

버전 3.1


Table of Contents

서문
설명서 개요
대상 독자
설명서 사용
표기 규칙
추가 정보
사용자 의견
RealView Compilation Tools에 대한 사용자 의견
설명서에 대한 사용자 의견
1. 소개
1.1. RVCT 개요
1.1.1. 예제 사용
1.2. ARM 프로세서용 소프트웨어 개발
1.2.1. 임베디드 소프트웨어 개발
1.2.2. ARM 코드와 Thumb 코드의인터워킹
1.2.3. C, C++ 및 어셈블리 언어 조합
1.2.4. 프로세서 예외 처리
1.2.5. AAPCS 사용
1.2.6. 레거시 개체 및 라이브러리와의 호환성
2. 임베디드 소프트웨어 개발
2.1. 임베디드 소프트웨어 개발 개요
2.1.1. 예제 코드
2.2. 타겟 시스템이 없을 경우의 기본 컴파일 도구 동작
2.2.1. 세미호스팅
2.2.2. C 라이브러리 구조
2.2.3. 기본 메모리 맵
2.2.4. 링커 배치 규칙
2.2.5. 응용 프로그램 시작
2.2.6. 빌드 1의 예제 코드
2.3. 타켓 하드웨어에 맞게 C 라이브러리 조정
2.3.1. C 라이브러리 타겟 조정
2.3.2. C 라이브러리 세미호스팅 사용 안 함
2.3.3. 빌드 2의 예제 코드
2.4. 타켓 하드웨어에 맞게 이미지 메모리 맵 조정
2.4.1. 스캐터 로딩
2.4.2. 스캐터 로딩 설명 파일 구문
2.4.3. 스캐터 로딩 설명 파일 예제
2.4.4. 스캐터 로딩 설명 파일에 개체 배치
2.4.5. 루트 영역
2.4.6. 스택 및 힙 배치
2.4.7. 런타임 메모리 모델
2.4.8. 빌드 3의 예제 코드
2.4.9. ARMv6-M 및 ARMv7-M 메모리맵
2.5. 리셋 및 초기화
2.5.1. 초기화 시퀀스
2.5.2. 벡터 테이블
2.5.3. ROM/RAM 재매핑
2.5.4. 지역 메모리 설정 고려 사항
2.5.5. 스캐터 로딩 및 메모리 설정
2.5.6. 스택 포인터 초기화
2.5.7. 하드웨어 초기화
2.5.8. 실행 모드 고려 사항
2.5.9. 빌드 4의 예제 코드
2.6. 기타 메모리 맵 고려 사항
2.6.1. 스캐터 로딩 설명 파일에 타겟 주변 기기 배치
2.6.2. 빌드 5의 예제 코드
3. 위치 독립적인 코드 및 데이터 작성
3.1. 위치 독립성
3.1.1. AAPCS 사용
3.2. 읽기 전용 위치 독립성
3.2.1. ROPI를 포함한 레지스터 사용
3.2.2. ROPI용 C 및 어셈블러 코드 작성
3.2.3. 코드 링크
3.2.4. FPIC 주소 지정
3.2.5. 코드 예제
3.3. 읽기/쓰기 위치 독립성
3.3.1. 재진입 루틴
3.3.2. RWPI를 포함한 레지스터 사용
3.3.3. 위치 독립적 데이터의 주소 지정
3.3.4. RWPI용 어셈블리 언어 작성
3.3.5. 코드 링크
3.3.6. 코드 예제
4. ARM과 Thumb의 인터워킹
4.1. 인터워킹 개요
4.1.1. AAPCS 사용
4.1.2. 인터워킹을 사용하는 경우
4.1.3. /interwork 옵션 사용
4.1.4. 인터워킹 호출 감지
4.1.5. 링커에서 생성된 비니어
4.2. 어셈블리 언어 인터워킹
4.2.1. 분기 및 전환 명령어
4.2.2. 어셈블러 모드 변경
4.2.3. ARM 헤더 예제
4.2.4. ARM 아키텍처 v5T 이상과 인터워킹
4.2.5. Thumb 코드의 레이블
4.3. C/C++ 인터워킹 및 비니어
4.3.1. 인터워킹을 위한 코드 컴파일
4.3.2. C 및 C++ 인터워킹의 기본 규칙
4.3.3. Thumb 상태의 함수에 대한 포인터
4.3.4. 동일한 함수의 두 가지 버전 사용
4.4. 비니어를 사용한 어셈블리 언어 인터워킹
4.4.1. 비니어를 사용한 어셈블리 전용 인터워킹
4.4.2. 비니어를 사용한 C, C++ 및 어셈블리 언어 인터워킹
5. C, C++ 및 어셈블리 언어 조합
5.1. 인라인 및 임베디드 어셈블러 사용
5.1.1. 인라인 어셈블러의 기능
5.1.2. 임베디드 어셈블러의 기능
5.1.3. 인라인 어셈블리 코드와 임베디드 어셈블리 코드의 차이점
5.2. 어셈블리 코드에서 C 전역 변수 액세스
5.3. C++에서 C 헤더 파일 사용
5.3.1. 시스템 C 헤더 파일 포함
5.3.2. 사용자 고유의 C 헤더 파일 포함
5.4. C, C++ 및 ARM 어셈블리 언어 간 호출
5.4.1. 언어 간 호출을 위한 일반적인 규칙
5.4.2. C++ 관련 정보
5.4.3. 언어 간 호출 예제
6. 프로세서 예외 처리
6.1. 프로세서 예외 개요
6.1.1. 예외 유형
6.1.2. 벡터 테이블
6.1.3. 예외별 모드 및 레지스터 사용
6.1.4. 예외 우선순위
6.2. 프로세서 상태 확인
6.3. 예외 발생 및 종료
6.3.1. 예외에 대한 프로세서 응답
6.3.2. 예외 처리기에서 복귀
6.3.3. 복귀 주소 및 복귀 명령어
6.4. 예외 처리
6.5. 예외 처리기 설치
6.5.1. 예외 처리기 설치 방법
6.5.2. 리셋 시 처리기 설치
6.5.3. C에서 처리기 설치
6.6. SVC 처리기
6.6.1. 호출할 SVC 결정
6.6.2. 어셈블리 언어의 SVC 처리기
6.6.3. C 및 어셈블리 언어의 SVC 처리기
6.6.4. 관리자 모드에서 SVC 사용
6.6.5. 응용 프로그램에서 SVC 호출
6.6.6. 응용 프로그램에서 동적으로 SVC 호출
6.7. 인터럽트 처리기
6.7.1. 외부 인터럽트 수준
6.7.2. C의 간단한 인터럽트 처리기
6.7.3. 재진입 인터럽트 처리기
6.7.4. 어셈블리 언어의 예제 인터럽트 처리기
6.8. 리셋 처리기
6.9. 정의되지 않은 명령어 처리기
6.10. 프리페치 어보트 처리기
6.11. 데이터 어보트 처리기
6.12. 시스템 모드
7. Cortex-M3 프로세서 예외 처리
7.1. Cortex-M3 프로세서 예외
7.1.1. 작업 및 실행 모드
7.1.2. 주 스택과 프로세스 스택
7.1.3. 예외 번호
7.1.4. 벡터 테이블
7.1.5. 이벤트
7.1.6. 예외 우선순위와 발생 순서
7.1.7. 중첩된 벡터 인터럽트 컨트롤러
7.2. 예외 테이블 기록
7.3. 예외 처리기 기록
7.4. 예외 테이블 배치
7.5. 시스템 제어 공간 레지스터 구성
7.6. 개별 IRQ 구성
7.6.1. 인터럽트 우선순위
7.7. 관리자 호출
7.8. 시스템 타이머
7.8.1. SysTick 구성
7.9. 다른 ARM 프로세서용으로 작성된 예외 처리 코드 이식
7.9.1. 중요한 섹션과 예외 동작
8. 디버그 통신 채널
8.1. 디버그 통신 채널 개요
8.2. 타겟에서의 데이터 전송
8.3. 폴링 방식 디버그 통신
8.3.1. 통신 데이터 제어 레지스터
8.3.2. 타겟에서 디버거로의 통신
8.3.3. 디버거에서 타겟으로의 통신
8.4. 인터럽트 구동 디버그 통신
8.5. Thumb 상태에서 액세스
A. 세미호스팅
A.1. 세미호스팅 개요
A.1.1. 세미호스팅이란?
A.1.2. 세미호스팅 인터페이스
A.2. 세미호스팅 구현
A.2.1. RealView ARMulator ISS
A.2.2. RealView ICE
A.2.3. 명령어 세트 시스템 모델
A.2.4. RealMonitor
A.3. 세미호스팅 작업
A.3.1. angel_SWIreason_EnterSVC(0x17)
A.3.2. angel_SWIreason_ReportException(0x18)
A.3.3. SYS_CLOSE(0x02)
A.3.4. SYS_CLOCK (0x10)
A.3.5. SYS_ELAPSED(0x30)
A.3.6. SYS_ERRNO(0x13)
A.3.7. SYS_FLEN (0x0C)
A.3.8. SYS_GET_CMDLINE(0x15)
A.3.9. SYS_HEAPINFO(0x16)
A.3.10. SYS_ISERROR (0x08)
A.3.11. SYS_ISTTY (0x09)
A.3.12. SYS_OPEN (0x01)
A.3.13. SYS_READ(0x06)
A.3.14. SYS_READC (0x07)
A.3.15. SYS_REMOVE(0x0E)
A.3.16. SYS_RENAME (0x0F)
A.3.17. SYS_SEEK (0x0A)
A.3.18. SYS_SYSTEM(0x12)
A.3.19. SYS_TICKFREQ (0x31)
A.3.20. SYS_TIME (0x11)
A.3.21. SYS_TMPNAM(0x0D)
A.3.22. SYS_WRITE (0x05)
A.3.23. SYS_WRITEC (0x03)
A.3.24. SYS_WRITE0(0x04)
A.4. 디버그 에이전트 상호작용 SVC

소유권 고지 사항

® 또는 ™ 표시가 있는 단어와 로고는 ARM Limited 소유의등록 상표 또는 상표입니다. 이 설명서에 언급된 기타 브랜드와 이름은 해당 소유자의 상표일 수 있습니다.

이 설명서에 포함된 전체 또는 일부 정보나 설명된 제품은 해당 저작권 소유자의 사전 서면 승인 없이는 어떤형태로도 개조되거나 복제될 수 없습니다.

이 설명서에 설명된 제품은 지속적으로 개발 및 개선될 수 있습니다. 이 설명서에 포함된 모든 제품 명세와해당 사용법은 ARM의 신뢰하에 제공됩니다. 그러나 ARM에서는 상품성 또는 특정 목적에의 적합성을 비롯하여 그 밖의묵시적이거나 명시적인 모든 보증을 부인합니다.

이 설명서는 제품 사용자를 지원하는 용도로만 만들어졌습니다. ARM Limited는 이 설명서 정보의 사용,정보의 오류나 누락 또는 제품의 잘못된 사용에 따른 어떠한 손실이나 손상도 책임지지 않습니다.

ARM이라는 단어가 사용되는 경우 "ARM이나 해당하는 자회사"를 의미합니다.

기밀 상태

이 설명서는 기밀 문서가 아닙니다. 이 설명서의사용, 복사 및 공개에 대한 권한은 ARM과 ARM으로부터이 설명서를 제공받은 당사자가 동의한 계약 조건에따라 라이센스 제한의 적용을 받을 수 있습니다.

제품 상태

이 설명서의 정보는 개발이 완료된 제품에 대한최종 정보입니다.

Revision History
Revision A 2002년8월 릴리스 1.2
Revision B 2003년1월 릴리스 2.0
Revision C 2003년9월 RVDS 버전 2.0용 릴리스 2.0.1
Revision D 2004년1월 RVDS 버전 2.1용 릴리스 2.1
Revision E 2004년12월 RVDS 버전 2.2용 릴리스 2.2
Revision F 2005년5월 RVDS 버전 2.2 SP1용 릴리스 2.2
Revision G 2006년3월 RVDS 3.0용 릴리스 3.0
Revision H 2007년3월 RVDS 버전 3.1용 릴리스 3.1
Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0203HK
Non-Confidential