테일 체이닝
·
ARM arch/Cortex-M
Tail-ChainingARM Cortex-M 프로세서에서 익셉션 간의 전환 시간을 줄이는 최적화 기능동작 원리 2개의 익셉션 (IRQ1, IRQ2)이 있고, 이 익셉션이 발생하면 실행되는 핸들러1, 핸들러2가 있다고 가정하자.또한 익셉션 우선순위는 IRQ1 > IRQ2 즉, IRQ1 익셉션이 우선 순위가 더 높다. 유저 스레드에서 실행중일때 IRQ1이 발생하면, 유저 스레드에서의 상태 (레지스터 내용)들을 전부 스택에 저장한다.이를, 스태킹(stacking)이라고 한다. 이후에 핸들러1이 실행될 것이다. 핸들러1이 실행되는 도중에, IRQ2가 발생한다.하지만, 우선순위는 IRQ1이 우선순위가 더 높기 때문에 처리가 보류(pending)된다.핸들러1이 끝나야 핸들러2가 실행될 수 있다. 핸들러1의 실행이..
NVIC, Exception Vector Table
·
ARM arch/Cortex-M
NVICNested Vectored Interrupt Controller(중첩 벡터형 인터럽트 제어기)즉, 우선순위에 따라서 모든 인터럽트를 처리 가능Cortex-M 프로세서의 내부에 위치최대 256개의 서로 다른 우선 순위 설정 가능, 최대 240개 외부 인터럽트 지원 가능프로세스 상태: 인터럽트 진입시 자동으로 저장(by HW), 인터럽트 종료 시 복원인터럽트 테일 체인 지원Cortex-M의 벡터 테이블은 이전의 레거시 ARM 코어와 약간 다름하드웨어 인터럽트 처리를 메인 인터럽트 벡터테이블에서 처리 → 응답시간 개선레거시 ARM과 달리, 벡터 테이블에 명령어가 아닌 예외처리기 및 ISR의 주소가 포함Exception Vector Table총 n개의 인터럽트 처리를 위한 테이블벡터 테이블은 인터럽트 ..
cortex-m3 AMBA와 메모리 맵
·
ARM arch/Cortex-M
AMBAAdvanced Microcontroller Bus ArchitectureARM에서 제시한 SoC 내부 버스 구조 표준 규약다양한 IP블록을 어떻게 연결하고 통신할지에 대한 버스 인터페이스 프로토콜IP : Intellectual Property왜 사용?만약 각 MCU(SoC)마다 버스 구조가 다르면유지보수 어려움성능 편차 발생IP재사용성 떨어짐그래서 AMBA를 채택ARM기반 SoC간 호환성 확보버스 통신 효율성 향상디자인 재사용/모듈화AHBAdvanced High-performance Bus고속 메모리 접근RAM이나 프로세서같은 경우 고속의 장치이고 그에 맞는 고속Bus가 필요APBAdvanced Peripheral Bus저속 주변장치 연결I/O장치같은 것들은 상대적으로 저속이므로 저속 Bus를 ..
2025.07.09 - ARM assembly 프로그래밍2
·
ARM arch/Cortex-M
load / store 명령어ldrldr r1, =0x20000148ldr r0, [r1]r1에 주소를 저장하고r0에 해당 주소에 있는 값을 저장strstr r1, =0x20000154str r0, [r1]r1에 주소를 저장하고r0의 값을 해당 메모리주소에 저장ldrb메모리에서 1byte만 읽을 때ldr r1, =0x20000148ldrb r0, [r1]ldrb에서의 b는 byte를 의미함r1에 주소를 저장하고해당 주소에서 1byte를 읽어서 r0에 저장pre-indexed addressing modeldr r1, =0x20000140ldr r0, [r1, #8]실제 접근하는 주소는 0x20000148이 된다.post-indexed addressing modeldr r1, =0x20000140ldr r0..
2025.07.07 - ARM assembly 프로그래밍1
·
ARM arch/Cortex-M
분기문 - 두 수 중 큰 값을 반환max_prac: cmp r0,r1 @ compare with r0, r1 based on r0 bge 1f @ greator equal blt 2f @ less than1: @ r0가 더 클때 mov r0, r0 bx lr2: @ r1가 더 클때 mov r0, r1 @ r0이 반환 레지스터이기 때문에 결과를 r0에 저장 bx lr @ 복귀주소로 복귀AAPCS에 의해 r0에는 인자1, r1에는 인자2가 들어감r0과 r1을 r0 기준으로 비교r0이 크거나 같으면 분기 1, r1이 크면 분기 2리턴 레지스터가 r0이므로, 큰 값을 r0에 넣어두고 반환비트 연산 - 특정 비트 클리어 .global clear_unusedclear_unused: mov r2,#1 @r2에 숫자..
빅 엔디언, 리틀 엔디언
·
ARM arch/Cortex-M
엔디언 (Endian)컴퓨터의 메모리와 같은 1차원의 공간에 다 바이트 이상의 데이터를 저장할 때, 바이트 순서를 정하는 방식메모리 ↔ 레지스터 간의 읽기/쓰기 시 바이트 순서에 영향을 받는다.빅 엔디언 (Big-Endian)MSB를 먼저 저장리틀 엔디언 (Little-Endian)LSB를 먼저 저장메모리의 시작 주소에 있는 데이터에서 레지스터의 MSB부터 채워진다. 메모리의 시작 주소에 있는 데이터에서 레지스터의 LSB부터 채워진다.Cortext-M기본적으로 Little-Endian을 채택대부분의 MCU 및 저전력 임베디드 시스템에서의 성능 및 호환성 확보 목적