프로세서의 작동 모드란 무엇입니까
ARM 마이크로프로세서는 일반적으로 두 가지 작업 상태를 가지며 두 상태 사이를 전환할 수 있습니다.
첫 번째는 ARM 상태이며, 이 경우 프로세서는 32 비트 단어 정렬 ARM 명령을 실행합니다.
두 번째는 프로세서가 16 비트 반자 정렬 Thumb 명령을 실행하는 Thumb 상태입니다. < P > 프로그램을 실행하는 동안 마이크로프로세서는 언제든지 두 작업 상태 사이를 전환할 수 있으며 프로세서 작업 상태를 변경해도 프로세서의 작업 모드와 해당 레지스터의 내용에는 영향을 주지 않습니다. 그러나 ARM 마이크로프로세서는 코드 실행을 시작할 때 ARM 상태여야 합니다.
ARM 프로세서 상태
Thumb 상태로 이동: 피연산자 레지스터의 상태 비트 (비트 ) 가 1 인 경우 BX 명령을 실행하여 마이크로프로세서를 ARM 상태에서 Thumb 상태로 전환할 수 있습니다. 또한 프로세서가 Thumb 상태일 때 예외 (예: IRQ, FIQ, Undef, Abort, SWI 등) 가 발생하면 예외 처리가 반환될 때 자동으로 Thumb 상태로 전환됩니다.
ARM 상태로 이동: 피연산자 레지스터의 상태가 일 때 BX 명령을 실행하면 마이크로프로세서가 Thumb 상태에서 ARM 상태로 전환됩니다. 또한 프로세서가 예외 처리를 하는 동안 PC 포인터를 예외 모드 링크 레지스터에 놓고 예외 벡터 주소부터 프로그램 실행을 시작하여 프로세서를 ARM 상태로 전환할 수 있습니다.
ARM 프로세서 모드
ARM 마이크로프로세서는
사용자 모드 (usr): arm 프로세서의 일반 프로그램 실행 상태라는 7 가지 실행 모드를 지원합니다.
fiq (fast interrupt mode): 고속 데이터 전송 또는 채널 처리에 사용됩니다.
외부 인터럽트 모드 (IRQ): 범용 인터럽트 처리에 사용됩니다.
관리 모드 (SVC): 운영 체제에서 사용하는 보호 모드입니다.
데이터 액세스 종료 모드 (abt): 데이터 또는 디렉티브 프리페치가 종료되면 가상 스토리지 및 스토리지 보호에 사용할 수 있습니다.
시스템 모드 (sys): 권한이 있는 운영 체제 작업을 실행합니다. < P > 명령 중단 모드 정의 (und): 정의되지 않은 명령이 실행될 때 이 모드로 들어가면 하드웨어 보조 프로세서의 소프트웨어 에뮬레이션을 지원하는 데 사용할 수 있습니다.
ARM 프로세서 모드
ARM 마이크로프로세서의 작동 모드는 소프트웨어를 통해 변경하거나 외부 인터럽트 또는 예외 처리를 통해 변경할 수 있습니다. 대부분의 응용 프로그램은 사용자 모드에서 실행되며, 프로세서가 사용자 모드에서 실행될 때 일부 보호된 시스템 리소스에 액세스할 수 없습니다. < P > 사용자 모드를 제외한 6 가지 모드를 모두 비사용자 모드 또는 권한 모드라고 합니다. 사용자 모드와 시스템 모드를 제외한 5 가지 예외 모드라고도 하며 인터럽트 또는 예외, 보호된 시스템 리소스에 액세스해야 하는 경우를 처리하는 데 자주 사용됩니다.
ARM 레지스터
ARM 프로세서 * * * 에는 37 개의 레지스터가 있습니다. 여기에는 프로그램 카운터 (PC) 를 포함한 31 개의 범용 레지스터가 포함됩니다. 이 레지스터는 모두 32 비트 레지스터이다. 그리고 6 개의 32 비트 상태 레지스터입니다. < P > 레지스터에 대해서는 여기서 자세히 소개하지 않습니다. 관심 있는 분들은 인터넷으로 찾아보실 수 있습니다. 이 방면에 대한 자료가 많이 있습니다. < P > 예외 처리 < P > 정상적인 프로그램 실행 프로세스가 일시적으로 중지되면 예외라고 합니다 (예: 외부 인터럽트 요청 처리). 예외를 처리하기 전에 현재 프로세서의 상태를 유지해야 예외 처리가 완료된 후 현재 프로그램을 계속 실행할 수 있습니다. 프로세서는 여러 예외가 동시에 발생할 수 있도록 허용하며 고정 우선 순위에 따라 처리됩니다. 예외가 발생하면 ARM 마이크로프로세서는 다음과 같은 몇 가지 작업을 수행합니다. < P > 예외 처리에 들어가는 기본 단계: < P > 다음 명령의 주소를 해당 연결 레지스터 LR 에 저장하여 프로그램이 예외 반환을 처리할 때 올바른 위치에서 다시 시작할 수 있도록 합니다. CPSR 을 해당 SPSR 에 복제합니다. 예외 유형에 따라 CPSR 의 실행 모드 비트를 강제로 설정합니다. < P > PC 가 관련 예외 벡터 주소에서 다음 명령을 강제로 실행하여 해당 예외 처리기로 이동하도록 합니다. 예외가 발생할 때 프로세서가 Thumb 상태에 있으면 예외 벡터 주소가 PC 에 로드될 때 프로세서가 자동으로 ARM 상태로 전환됩니다.
ARM 마이크로프로세서의 비정상적인 응답 절차는 유사 코드로 설명할 수 있습니다.
R14 _ = return link
spsr _ = cpsr
cpsr [4: ] = exxr ARM 작업 상태에서 실행 중인 경우
if = = reset or fiq then; FIQ 예외에 응답할 때 신규 FIQ 예외 금지
cpsr [6] = 1
PSR [7] = 1
PC = exception vector address
SPSR 을 다시 CPSR 에 복사합니다.
예외 처리에 들어갈 때 인터럽트 금지 비트가 설정된 경우 여기에서 지우십시오.
.................................................................................................................................................
Boot Loader 소개
간단히 말해서 bootloader 는 운영 체제 커널이 실행되기 전에 실행되는 애플릿입니다. 이 애플릿을 사용하면 하드웨어 장치를 초기화하고 메모리 공간을 매핑하여 시스템의 하드웨어 및 소프트웨어 환경을 적절한 상태로 전환하여 운영 체제 커널에 대한 최종 호출을 위한 올바른 환경을 준비할 수 있습니다.
Boot Loader 는 특히 임베디드 세계에서 하드웨어에 크게 의존하여 구현됩니다. 따라서 임베디드 세계에서 범용 부트 로더를 만드는 것은 거의 불가능합니다. 그럼에도 불구하고 Boot Loader 에 대한 몇 가지 일반적인 개념을 요약하여 사용자별 Boot Loader 설계 및 구현을 안내할 수 있습니다.
ARM7TDMI core 기반 CPU 는 재설정 시 일반적으로 주소 x 에서 첫 번째 명령을 취합니다. 시스템 전원을 켠 후 CPU 는 먼저 Boot Loader 프로그램을 실행합니다.
대부분의 Boot Loader 에는 "부트 로드" 모드와 "다운로드" 모드의 두 가지 운영 모드가 포함되어 있습니다.
부트 로드 모드: Boot Loader 는 대상 시스템의 솔리드 스테이트 스토리지 장치 중 하나에서 운영 체제를 rad 로 로드합니다
다운로드 모드: 부트 로더는 직렬 연결 또는 네트워크 연결과 같은 통신 수단을 통해 호스트 (호스트) 에서 파일을 다운로드합니다 (예: 커널 이미지 및 루트 파일 시스템 이미지 다운로드 등).
BOOT 의 일반적인 단계는 다음과 같습니다.
인터럽트 벡터 설정
스토리지 디바이스 초기화
스택 초기화
사용자 인스턴스 초기화
기본 애플리케이션 호출
인터럽트 벡터 설정
ARM 요구 사항 인터럽트 벡터 테이블 필요 < P > 인터럽트가 발생할 때마다 ARM 프로세서는 PC 포인터를 척도에 있는 해당 인터럽트 유형의 주소 값으로 강제 배치합니다. 각 인터럽트는 척도에 있는 한 단어의 저장 공간만 차지하기 때문에 하나의 ARM 지시만 배치할 수 있어 프로그램이 스토리지의 다른 곳으로 점프하고 인터럽트 처리를 수행할 수 있습니다.
인터럽트 벡터 테이블의 프로그램 구현은 일반적으로
AREA Boot ,CODE, Readonly
ENTRY
b reset handler
b undef handler
b swi handler
b preaborthandler <; 연결할 때 이 코드가 주소에 연결되어 있고 전체 프로그램의 입구로 사용되는지 확인해야 합니다. -응?
스토리지 디바이스 초기화
스토리지 포트의 인터페이스 타이밍 최적화는 전체 시스템의 성능에 영향을 미치는 매우 중요합니다. 일반 시스템의 속도 병목 현상은 모두 스토리지 액세스에 존재하므로 스토리지 액세스 타이밍은 가능한 한 빨라야 합니다. 동시에 이로 인한 안정성 문제도 고려해야 한다.
칩, 스토리지 및 인터페이스는 보드에 따라 크게 다르므로 상황에 따라 구성해야 합니다.
스택 초기화
ARM 에는 7 가지 실행 상태가 있으므로 각 상태의 스택 포인터 레지스터 (SP) 는 독립적입니다. 따라서 프로그램에 필요한 각 모드에 대해 SP 에 스택 주소를 정의해야 합니다. 방법은 상태 레지스터 내의 상태 비트를 변경하여 프로세서를 다른 상태로 전환한 다음 SP 에 값을 할당하는 것입니다. 주의: User 모드로 전환하여 User 모드의 스택 설정을 하지 마십시오. User 모드로 들어가면 더 이상 CPSR 을 조작할 수 없고 다른 모드로 돌아갈 수 없기 때문에 다음 프로그램 실행에 영향을 줄 수 있습니다.
스택 초기화 코드 예:
mrsr, cpsr; Cpsr 레지스터의 값 읽기
bicr, r, # modemask; 패턴 비트
orrr1, r, # undef mode | noint
msrcpsr _ cxsf, R1; Undef mode
ldrsp, = undef stack
기타 모드의 스택 초기화도 유사합니다.
스택 주소는 일반적으로
(_ ISR _ startaddress-x14)
userstack # 124 로 정의됩니다. #=field, 124
SVC stack # 124
undef stack # 124
abort stack # 124 < p 길이의 데이터 도메인 정의 처음에 이미지는 항상 ROM/Flash 에 저장되며, RO 부분은 ROM/Flash 내에서 실행하거나 더 빠른 RAM 으로 전송하여 실행할 수 있습니다. RW 와 ZI 는 쓰기 가능한 RAM 으로 옮겨야 합니다. 애플리케이션 실행 환경의 초기화란 ROM 에서 RAM 으로 필요한 데이터 전송 및 컨텐츠 제로를 완료하는 것입니다.
컴파일러는 다음 기호를 사용하여 각 세그먼트의 시작 및 종료 주소를 기록합니다.
| image $ $ ro $ $ base |: ro 세그먼트 시작 주소
| image $ $ ro $ $ limit | : ZI 섹션 끝 주소+1
| image $ $ zi $ $ base |: zi 섹션 시작 주소
| image $ $ zi $ $ limit |: zi 섹션 끝 주소+1 <;
사용자 인스턴스 초기화는 주로 RO, RW, ZI 의 세 단락을 지정된 위치에 복제하는 것입니다. < P > 기본 응용 프로그램 호출 < P > 모든 시스템 초기화 작업이 완료되면 프로그램 프로세스를 기본 응용 프로그램으로 옮겨야 합니다. 가장 간단한 경우는
IMPORT main
B? Main
이상 나는 수색해 왔고, 나는 알지 못했다.