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.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에 숫자..
AAPCS
·
ARM arch/Cortex-M
procedure call standard for ARM instruction어셈블리 함수 C호출 예제ARM 어셈블리에서는 함수 호출과 반환이 AAPCS (ARM Architecture Procedure Call Standard)에 따라 이루어짐.아래는 2개의 int 값을 더해서 반환하는 어셈블리 함수를 C에서 호출하는 예제 어셈블리 함수 (libs.s) .global FIRST_ASM_FUNCFIRST_ASM_FUNC: @ 함수 시작 (전역 레이블) add r0, r1 @ r0 = r0 + r1 (r0: 첫 번째 인자, r1: 두 번째 인자) bx lr @ 복귀 (lr에 저장된 주소로 분기), r0 값이 반환됨C 코드에..
Thumb2 명령어 / 레지스터 / 핸들러 모드, 쓰레드 모드
·
ARM arch/Cortex-M
기존의 명령어 셋Thumb 명령어셋ARM 명령어셋Thumb 명령어16비트 고정 길이 명령어코드 크기 줄이고, 메모리 절약ARM 명령어32비트 고정 길이 명령어고성능, 풍부한 연산기능 제공Thumb과 ARM 명령어셋 비교 메모리 대역폭이 32bit일때한번에 32비트 가져올 수 있음 → ARM에유리Thumb명령어는 16비트지만, decode는 결국 fetch당 한번만 수행 → 이득없음메모리 대역폭이 16bit일때ARM명령어는 2번 fetch필요 → 비효율Thumb명령어는 1번fetch로 충분 → 효율적그래서 Thumb2 명령어 사용Thumb와 ARM 명령어를 번갈아서 사용하면, overhead가 생긴다.→ 성능 저하 발생 따라서, Thumb와 ARM을 혼합한 Thumb2를 사용하는데,모드 전환이 필요없기 때..