1. Intro, Cortex M4

손지웅·2025년 3월 14일

Embedded Software

목록 보기
2/7

Embedded Software Intro

정의

혼자 동작하는 범용성의 컴퓨터가 아니라, 제품이나 기기에 내장되어 동작하는 컴퓨터 시스템.
임베디드 시스템에서는 컴퓨터가 어떤 기기를 동작시킨다.

  • 일반적인 임베디드 시스템의 구성. 제품과의 Interface 역할. 따라서 수행해야 할 일에 대한 이해가 필요하다.

  • 임베디드 컴퓨터 : 검은 전선으로 표시된 부분 . 제한된 환경에서 최적화된 기능을 수행한다.

  • CPU : Center Process Unit. 시스템의 연산 및 제어를 담당하는 핵심 요소

  • memory : 프로그램과 데이터를 저장하는 역할. ( Flash memory(비휘발성) + RAM )

  • I/O : 외부와 데이터를 주고받은 interface 역할

  • analog 장치 : 입력 및 출력과 연결되어 있다.
    - 임베디드 시스템에서는 아날로그 신호를 받아야 하는 경우가 매우 많다. CPU는 디지털 데이터를 처리하므로 입력에서는 Analog-to-Digital Converter ( ADC ) , 출력에서 Digital-to-Analog Converter ( DAC ) 를 사용한다.

  • 초소형 드론 시스템
  • 하드웨어 사양과 센서 및 내비게이션
  • 임베디드 프로세서 ( OMAP44xx ) 를 활용하여 실시간으로 데이터를 처리하고 무선 통신을 통해 원격 조작이 가능하다. 다중 센서를 통합하여 여러가지 기능을 수행

  • 자율주행 자동차의 센서 및 연산 시스템 구조
  • 센서 데이터 ( 카메라, LiDAR, Randar ) 를 빠르게 분석하고 실시간으로 주행 판단을 내림
  • 이를 위해 GPU, SoC, NNP 등의 고성능 프로세서를 활용
  • 센서 융합을 통해 다양한 데이터 통합

  • 테슬라의 자율주행 시스템을 구성하는 하드웨어 및 연산 구조

Enbedded SW

임베디드 시스템에서 실행되는 소프트웨어

  • 부트로더 : 임베디드 시스템이 전원을 켜면 가장 먼저 실행되는 소프트웨어. 하드웨어 초기화 및 커널을 메모리에 적재
  • 운영체제 : 하드웨어 자원 관리, 사용자와 하드웨어의 인터페이스
  • 미들웨어 : Application과 OS와의 인터페이스 역할
  • 애플리케이션
  • 디바이스 드라이버 : OS와 하드웨어의 인터페이스

HardWare - Device Driver - OS - APP - User

펌웨어 ( Firmware ) : ROM, FLASH 와 같이 firm(고정된) 저장장치에서 실행되는 소프트웨어

  • 소프트웨어와 하드웨어의 중간 역할
  • 펌웨어는 하드웨어를 직접 제어하면서, OS와 Application이 하드웨어를 쉽게 사용할 수 있도록 도와줌
  • 따라서, 펌웨어는 특정 하드웨어에 맞게 제작됨

Processor - Cortex M4

임베디드 시스템

일반적인 임베디드 시스템


Flash(Boot) : 비휘발성 메모리, 시스템의 부트로더와 펌웨어(OS) 등을 저장. 시스템이 켜질 때 부트로더가 해당 영역에서 실행됨.

SDRA(Main Memory) : 시스템의 주 메모리(휘발성), CPU가 실행 중인 프로그램 코드와 데이터를 임시로 저장

SoC whit 32-bit RISC Processor : System on Chip CPU, 32비트 RISC 프로세서와 다양한 주변장치등이 적제된 하나의 칩. 시스템의 모든 연산, 제어, 데이터 처리 작업 담당

Serial UART(Universal Asynchronous Receiver/Transmitter) : 직렬 통신을 위한 하드웨어 모듈. 외부 장치와의 데이터 송수신 담당

Controller : 외부장치와의 연결 담당

802.11 Chipset : 무선 네트워크 통신을 담당하는 칩 셋

파일시스템 : 외부에 대용량 데이터를 저장하고 관리

Real time clock (RTC) : 실시간 시계를 제공하는 하드웨어, 전원이 꺼져도 별도의 배터리로 시간을 유지

Serial Port : 외부 장치와의 직렬 통신을 위한 물리적 인터페이스, UART와 연결

임베디드 시스템의 구성

1. Processor – 임베디드 시스템의 중심

  • 시스템의 핵심 연산 및 제어를 담당하는 프로세서.

2. Power supply

  • 시스템이 동작하는 데 필요한 전원을 공급.

3. Battery (Optional)

  • 이동형 장치나 백업 전원 공급용 배터리.

4. Clock

  • 프로세서와 시스템의 동작 속도를 조절하는 클럭.

5. Reset

  • 시스템이 초기화되도록 설정하는 기능.

6. Memory

  • FLASH: 비휘발성 저장장치 (펌웨어 저장)
  • SDRAM: 실행 중인 데이터를 저장하는 메인 메모리
  • SRAM: 빠른 액세스가 필요한 임시 데이터 저장소

7. Digital I/O (Input/Output)

  • 디지털 신호(0과 1)를 주고받는 인터페이스.

8. Analog I/O

  • 센서 등의 아날로그 데이터를 처리하는 인터페이스.

9. Communication I/F (Interface)

  • 외부 장치와의 통신을 위한 인터페이스 (UART, SPI, I2C, Ethernet 등).

임베디드 시스템의 중심 : Processor

프로세서 : 컴퓨터나 임베디드 시스템에서 연산을 수행하는 핵심 장치. CPU의 상위 개념

프로세서의 종류

CPU – Central Processor Unit
  • 명령어 처리회로 중심의 프로세서
  • 인텔 i5, i7, Xeon, AMD의 범용성 프로세서
DSP – Digital Signal Processor
  • 아날로그 신호를 디지털로 변환하여 필터링, 신호변환 등의 시그널 분석을 위한 고속 프로세서
  • 예: TI TMS320, Qualcomm Krait
GPU – Graphic Processing Unit
  • 게임용 화면 영상처리 전용 프로세서로 개발되었지만, 현재는 AI 가속기로도 사용됨
  • 예: Nvidia, Mali
NPU – Neuromorphic Processing Unit
  • 뉴럴넷 계산 전용 프로세서
  • 예: HuaWei Kirin, Google TPU
MCU – Microcontroller Unit
  • 제어 목적을 위한 소형 프로세서
  • 예: Renesas, STM, Cortex-M4
AP – Application Processor
  • 앱 실행을 위한 모바일 전용 프로세서
  • 예: Exynos, A10 Bionic

임베디드 프로세서의 특징

SoC ( System-On-a-Chip ) 형태

  • 다수의 컨트롤러가 한 개의 소형 칩에 적재
  • 소형 RISC 프로세서와 다수의 컨트롤러가 SoC에 구현
  • 5G 통신칩과 결합하여 스마트폰 기능을 하나의 칩에 구현 ( 원 칩 )

저급~고급 아키텍쳐 제공

  • 8비트에서 64비트 멀티코어 아키텍쳐 사용 . 단순한 프로세서부터 고성능 멀티코어 프로세서까지 다양한 아키텍쳐 사용 가능

저전력

  • 계산을 위해 소모되는 전력을 절약하는 기능 포함

보안

  • SoC 상에 보안 알고리즘을 지원하는 하드웨어 포함.

인공지능

  • 뉴럴넷, 딥러닝 가속회로 내장 ( TPU, NPU )

다기능 융합

  • 카메라 제어기, 오디오, 비디오 코덱, TV 인터페이스 등

RISC CPU vs CISC CPU

CPU 설계 방식 == ISA 에 따른 차이

순번비교항목CISC (Complex Instruction Set Computer)RISC (Reduced Instruction Set Computer)
1명령어 수많다적다
2명령어 길이가변적, 다양2, 3가지로 고정
3명령 실행시간명령어에 따라 가변적일정함
4범용 레지스터 수적다많다
5메모리 접근제한 없음Load, Store 명령만 허용

RISC vs CISC 간단 정리

  • CISC (Complex Instruction Set Computer)

    • 명령어 개수가 많고, 다양한 연산이 가능하지만 실행 시간이 일정하지 않음.
    • 예시: x86 (Intel, AMD)
  • RISC (Reduced Instruction Set Computer)

    • 단순하고 적은 명령어를 사용하여 빠른 실행 속도를 유지함.
    • 회로 처리가 단순하여 범용 레지스터 공간이 많다. 공간이 많이 남기 때문
    • 예시: ARM (스마트폰, 임베디드 시스템)
  • 범용 레지스터가 많으면 많을수록 성능이 향상된다.

    • 범용 레지스터가 적음 -> 메모리 접근이 많아져 속도 저하
  • 짧은 명령어를 사용하면 코드 밀도가 높아짐. -> 범용 레지스터 넣을 공간 많아짐 -> 속도 상승

  • 명령어가 길면 성능이 좋아짐.

레지스터와 메모리의 차이
비교 항목레지스터 (Register)메모리 (Memory)
위치CPU 내부CPU 외부 (RAM, ROM, HDD, SSD)
속도매우 빠름 (나노초 단위)상대적으로 느림 (RAM: 나노초~마이크로초, SSD: 마이크로초)
용량매우 적음 (몇 바이트~몇 킬로바이트)많음 (RAM: GB 단위, SSD: TB 단위)
전력 소비낮음 (CPU 내부에서 동작)상대적으로 높음 (외부 장치)
데이터 유지휘발성 (전원 차단 시 데이터 소멸)RAM: 휘발성, ROM/SSD: 비휘발성
역할CPU가 즉시 처리해야 하는 데이터를 임시 저장프로그램 실행 및 데이터 저장 역할
예시프로그램 카운터(PC), 명령 레지스터(IR), 범용 레지스터RAM, 캐시, 하드디스크, SSD
  • 레지스터(Register): CPU 내부에 있으며, 연산 속도를 높이기 위해 사용됨. 매우 빠르지만 용량이 작음.
  • 메모리(Memory): RAM, ROM, SSD 등 CPU 외부에 존재하며, 프로그램 실행과 데이터 저장을 담당함. 속도는 상대적으로 느리지만 용량이 큼.

ARM processor

ARM 프로세서의 역사

ARM의 의미

  • ARM은 "Acorn RISC Machines" 또는 "Advanced RISC Machines"를 의미함.

1. Acorn Computers Ltd – ARM의 시작

  • 1978년, 영국 케임브리지에서 작은 컴퓨터 회사로 설립.
  • 1979년, Acorn Atom 개발 (2KB RAM, 8비트 6502 마이크로프로세서).
    • BBC Micro 컴퓨터에 적용됨.

2. ARM – Acorn RISC Machine (1983 – 1985)

  • Acorn Computers Limited (Cambridge, England)에서 개발.
  • ARM1 & ARM2 프로세서, Sophie Wilson과 Steve Furber가 개발 (1985).
  • 관련 영화: BBC 영화 "Micro Men"

3. ARM – Advanced RISC Machine (1990)

  • 1990년, Acorn Computers, Apple Computer(현재 애플), VLSI Technology의 합작 투자로 ARM이 Acorn에서 독립(Spin-off)하여 설립됨.
  • 애플은 ARM 기술을 원했지만, Acorn의 IP 기반 제품을 원하지 않았음.
    • 애플: 현금을 투자
    • VLSI Tech: 도구 제공
    • Acorn: 12명의 엔지니어 제공
      → 이 과정을 통해 ARM이 탄생.
  • ARM의 출발점: 케임브리지의 럭셔리 사무실 → 창고!!

ARM 프로세서의 확장

  • obin Saxby (1991년 CEO 취임). 단일 제품에 의존하지 않는 IP 라이선스 기반 비즈니스 모델 제시.
  • ARM 프로세서 라이선스 판매
    • 선 라이센스비 + 실리콘 로열티 방식 매출
    • 이를 통해 많은 반도체 회사의 파트너가 됨.
    • ARM 에코시스템 탄생 . 2021년에 240억개의 arm기반 프로세서가 판매.
    • 최근엔 RISC-V 프로세서 등장

ARM 프로세서의 제품군

계열용도대표 모델
Cortex-A스마트폰, 태블릿, 노트북Cortex-A76, Cortex-A55
Cortex-R실시간 임베디드 시스템Cortex-R52
Cortex-M마이크로컨트롤러, IoTCortex-M7, Cortex-M4, Cortex-M0

armv9 ISA : 슈퍼컴퓨터에 사용하는 회로를 채택, 기능 강

Cortex-M4

Cortex-M4 프로세서 개요

  • Cortex-M4 프로세서는 MCU(Microcontroller Unit)이며, FPU(Floating Point Unit)과 DSP(Digital Signal Processing) 기능이 포함됨.
    • MCU ( 마이크로 컨트롤러 유닛 ) 기능: C 프로그래밍이 쉬우며, 인터럽트 처리가 빠르고 초저전력 설계.
    • FPU ( 부동소수점 연산 유닛 ) 기능: 단정도 부동소수점 연산 지원, 코드 최적화 및 개발 시간 단축.
    • DSP ( 디지털 신호 프로세서 유닛 ) 기능: 하버드 아키텍처, 단일 사이클 MAC(Multiply-Accumulate), 배럴 시프터(Barrel Shifter) 지원.
      자동차, 오디오 장치, 저전력 임베디드 시스템 등에 사용

Cortex-M4 프로세서 구성

  • ARMv7E-M 아키텍쳐 기반
    • Thumb-2 명령어 지원 ( 16bit, 32bit 혼합 명령어 집합, 코드 밀도와 성능 모두 확보 )
    • DSP 확장 기능 포함 ( 아닐로그 신호를 하드웨어로 빠르게 처리 할 수 있음 )
  • 옵션 FPU(Cortex-M4F) 지원. : 부동소수점 연산장치를 선택적으로 추가할 수 있음
  • Thumb-2 명령어 세트 설치되어 있음.
    -QADD(포화 연산), UXTB(패킹 및 언패킹), SMULTB(부호 있는 곱셈), ADD8(SIMD 연산) 등의 최적화된 명령어 사용 가능.

Cortex-M4 파이프라인 구조

명령어를 빠르고 효율적으로 사용할 수 있게, 한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태는 아래와 같이 구성된다.

  • 3-Stage Pipeline (Fetch → Decode → Execute)
    • Prefetch buffer(Cortex M4에 들어있는 플래시 메모리에 명령어를 미리 읽어와 저장해두는 버퍼)에 3개의 word(32bit) 저장 가능.
    • 레지스터만 사용하는 명령어의 경우 CPI = 1 (사이클당 1개 명령 실행).
    • CPI : Cycles Per Instruction, 명령어 하나를 실행하는 데 걸리는 평균 클록 사이클 수
    • 분기 명령어(branch)는 3 사이클 소요.
  1. 파이프라인에 남아 있는 명령어들을 비움 (FLUSH) : 해당 과정에서는 추가 사이클 필요로 하지 않음
  2. 새로운 분기 위치에서 명령어를 다시 가져와서, 파이프라인의 각 단계가 한 번씩 모두 채워져야 함 -> 3사이클

사이클 : CPU 시간의 최소 단위

파이프라인 단계
1. Fetch (명령어 가져오기)

  • 명령어를 메모리에서 가져와 프리페치 버퍼에 저장.
  • 다음에 실행할 명령어를 미리 가져와 성능 향상
  1. Decode (명령어 해석)
    • 명령어를 분석하고 필요한 레지스터 값을 읽음.
    • AGU (Address Generation Unit, 주소 생성 장치 ) 동작하여 메모리 접근이 필요한 경우 주소를 계산
    • Branch 분기 예측
      - 분기 명령어 ( 조건문 , loof ) 실행 시, Branch Forwarding & Speculation 을 통하여 실행 속도 최적화
  2. Execute (명령 실행)
    • 연산 수행 (ALU : Arithmetic Logic Unit에서 Multiply & Divide, Shift 등).
    • 메모리 접근이 필요한 경우 Load/Store 수행

--> 파이프라인은 CPU가 명령어를 더 빠르게 처리하기 위하여 명령어 실행 과정을 여러 단계로 쪼기고 각 단계를 병렬로 처리할 때 일어나는 구조이다.
명령어 하나를 처리할 때 Fetch, Decode, Execute로 나눔. 그리고 각 단계는 독립적으로 동시에 작동하게 된다.
첫번째 명령어 :Decode일때
동시에 두번째 명령어는 Fetch단계일수도

Cortex-M4 명령어 집합

  • ARMv7-M 아키텍처 기반
  • ARMv6-M (Cortex-M0/M1)보다 확장된 명령어 지원.
  • Thumb-2 명령어 포함 (16비트 + 일부 32비트 명령어).
    ```assembly
    MOV R0, #1    ; R0에 1을 저장 (16비트)
    ADD.W R1, R1, R2  ; R1 = R1 + R2 (32비트, 더 큰 범위 지원)
    ```

Cortex-M4 명령어 집합 비교 ( ISA, Instruction Set Architechture )

ISA : 프로그램과 하드웨어간의 약속. 소프트웨어가 하드웨어를 제어하는 방법을 결정하는 요소
Instruction Set, Registers, Addressing Modes .. 등 으로 구성

ARM 인스트럭션 집합 (Cortex-A 계열 프로세서)

  • 최초에 설계된 32비트 ARM 명령어 집합.
  • 모든 명령어가 고정된 32비트 길이를 가짐.
  • 조건부 실행을 지원하여 불필요한 분기를 줄임.

Thumb (Cortex-A 계열 프로세서)43

  • 기존 ARM의 32비트 명령어 집합을 16비트로 축소한 버전.
    • 프로그램 자체의 길이가 줄어든다. 따라서, 실행 속도가 빨라진다.
  • 코드 밀도가 높아져 메모리 사용량 절약.
  • 일부 성능 저하가 있을 수 있지만, 임베디드 시스템에서 유용.

Thumb-2 (Cortex-M 프로세서) - 사용하는 ISA

  • 기존 16비트 Thumb 명령어에 32비트 명령어 일부 추가 : ARM, Thumb 단점 보완
  • ARM의 32비트 명령어 집합과 동일한 성능을 유지하면서도 코드 밀도가 높음.
  • Thumb 명령어보다 성능이 개선됨.

Thumb-2와 ARM 인스트럭션 집합과의 차이

  • 대부분의 Thumb-2 명령어는 조건 실행을 지원하지 않음.
  • 기존 ARM 명령어는 대부분 조건부 실행(Condition Execution) 가능.
  • Thumb-2는 IT Block (If-Then-Else) 블록을 사용하여 조건 실행을 구현.
    분기문을 Pipe Line 이 만나면, CPU가 정신을 못차림 -> 먼저 예측 ( branch prediction, 95%의 확률로 맞춤 ) . 틀리면 pipeline flush 발생

M계열 프로세서의 레지스터 ( 32bit 길이 )

General-purpose register : R0 - R12

-Low register : 16 bit 명령어. R0 - R7
-High register : 8 bit 명령어. R8 - R12

  • **Thumb-2 아키텍쳐는 16비트와 32비트 명령어를 혼합하여 사용한다. 16비트 명령어는 길이가 짧기 때문에, 레지스터를 지정하는 데 사용할 수 있는 비트가 제한적이다. ( 3비트만을 사용하여 레지스터를 지정. 따라서 8개 범위의 레지스터만 사용이 가능하다. )T

stack pointer ( MSP, PSP ) :R13

  • 스택의 데이터를 push,pop 할 때 자동으로 값을 변경한다.
  • MSP ( Main Stack Pointer ) : 디폴트로 지정, CONTROL[1] 인 경우에 사용
    • 운영체제의 커널과 exception 핸들러가 실행될 때 사용
  • PSP ( Process Stack Pointer ) : CONTROL[0] 인 경우에 사용
    • 응용프로그램이 실행될 때 사용
  • 함수 호출 시, 리턴 주소를 저장 :
    • 설계 기본 철학 : 메모리에 접근하면 속도가 떨어진다. 모든 연산은 CPU에서 진행하자.
      • load, store 제외하곤 메모리 접근 X
  • 시스템이 리셋된 경우에는 LR = 0xFFFF_FFFF

Program Counter Register : R15

  • CPU가 실행할 다음 명령어의 메모리 저장
  • 리셋 시, 0x0000_00004 를 갖는다.

특수 레지스터 : MRS, MSR 명령어로만 접근 가능

MRS 명령어: Move from Special Register , MSR 명령어: Moce to Special Register
특수 레지스터와 범용 레지스터간의 데이터 이동

  • Program Status Register
  • Interrupt Mask Register
    • PRIMASK : NMI ( non-maskable interrupt ) , Hard fault를 제외한 모든 인터럽트를 비활성화시키는 레지스터
    • FAULTMASK : NMI를 제외한 모든 인터럽트를 비활성화시키는 레지스터
    • BASEPRI : 특정 우선순위 또는 그 이하의 우선순위를 가지는 인터럽트를 비활성화시키는 레지스터
  • CONTROL : 스택포인터 및 접근모드의 선택을 위한 레지스터

PSR

  • 실행중인 프로그램 상태를 저장.
  • Application Program Status Register ( APSR ) + Interrupt Program Status Register ( IPSR ) + Execution Program Status Register ( EPSR ) 로 구성
Condition code flags

ALU에서 연산 후 결과 상태를 나타내는 플래그 비트. CPU가 조건부 실행할 때 사용됨

  • N = Negativce result from ALU
  • Z = Zero result from ALU
    • ALU : Arithmetic Logic Unit . 연산 장치
T bit

프로세서의 실행 모드를 나타냄.

  • T = 0 : Processor in ARM state. INVSTATE fault 발생
  • T = 1 : Proessor in Thumb state. 이 상태가 계속 유지되어야 한다. 왜? Thumb 명령어 집합(16비트)를 사용하므로.
IT/ICI

if-then 실행 흐름을 관리하는 코드 및 인터럽트 컨트롤 정보 저장

  • IF-THEN 조건 코드, Interrupt Control Information ( 인터럽트 발생 시 현재 상태 저장 )
ISR Number

인터럽트 서비스 루틴 번호

  • 0 : Thread 모드
  • N : Exception 번호

Processor의 동작모드와 접근계층

운영체제와 응용 프로그램이 안정적으로 실행될 수 있도록 제어!

동작 모드

프로그램의 동작 모드를 구분해서 사용

  • 쓰레드모드 Thread mode : 응용프로그램을 실행할 때 사용
    • 리셋에서 벗어날 때 진입
    • CONTROL 레지스터를 이용하여 특권 제어
    • PSP 스택포인터 사용
  • 핸들러 모드 Handler mode : 예외처리 시 진입
    • 예외 핸들러에서 리턴할 때 쓰레드 모드로 전환
    • 항상 특권 접근 권한을 가짐 ( privileged )
    • MSP 사용

접근 계층

프로세서 명령어, 하드웨어 접근 권한을 구분해서 사용하도록 함.
1. 시스템 안정성 보장 . 만약 모든 코드가 CPU의 중요한 레지스터나 메모리에 접근이 가능하다면 ?
2. 보안 강화 및 악성 코드 방지 . CPU의 중요한 명령어를 실행할 수 없도록 제한.
3. 멀티태스킹 및 RTOS 지원. 한 개의 프로세스(스레드) 에서 메모리를 임의로 변경하면 다른 프로세스도 영향을 받을 수 있음

  • 비특권계층 Unprivileged
    • MSR ( Move to Special Register ), SRS ( Store Return State ) 명령어의 접근 제한
    • CPS ( Change Processor State ) 명령어로 실행이 금지
    • 특권 계층 SW로 전환하기 위해 SVC ( SuperVisor Call )인스트럭션을 사용해야 한다.
  • 특권계층 Privileged
    • 모든 자원을 접근할 수 있으며, 모든 인스트럭션을 사용할 수 있음.
    • CONTROL 레지스터에 쓰기 작업을 통하여 특권계층을 변경할 수 있다. 즉 특권⇄비특권
    • NVIC( Nested Vectored Interrupt Controller : 인터럽트 우선순위 설정 및 활성/비활성 관리 ) 레지스터들은 거의 모든 특권계층에서 접근 가능하다.

프로그램의 실행모드

  • Cortex-M 프로세서는 특권계층 + 쓰레드 모드로 부팅된다.
  • 부팅후 대부분 Privileged 쓰레드 모드에서 동작. unprivileged 모드는 거의 사용하지 않음.

ARM 프로세서의 메모리 맵

  • Memory Map : 임베디드 프로세서 내부와 외부의 주변장치들은 고유의 주소가 할당되어 있다. 임베디드 보드의 모든 디바이스의 주소할당 정보
  • 임베디드 시스템의 내부 및 외부 주변장치들을 접근하기 위해서는 각 장치들의 레지스터를 접근해야 하며, 이 레지스터들에는 정해진 주소가 할당되어 있다.
  • 프로세서의 범용 레지스터들은 주소가 아닌 고유 ID로 접근. 그 외에는 주소공간에 할당된 레지스터들을 통해서 접근
  • 임베디드 프로그래밍 : 주소공간에 할당된 레지스터를 접근하는 작업

Bit-Banding

  • Bit-band alias 영역 내의 1개의 워드 -> Bit-band 영역 내의 1개의 비트로 매핑
    • 워드에 0,1을 쓰면 대응되는 비트가 0,1 로 setting 됨.
  • 특정 비트를 바꾸려면, 읽기 -> 비트 변경 -> 다시 쓰기 과정을 거쳐야 한다.
    • Word : CPU가 한번에 처리 할 수 있는 데이터 단위. CPU 아키텍쳐에 따라 단위가 다름. Cortex-M 기준 4byte, 즉 32bits. 메모리에서 4바이트 단위로 데이터를 처리한다.
    • 각 영역은 CPU가 접근하는 메모리에 정의
    • 보통 프로세서는 비트를 직접 수정할 수 없고, 8 or 32비트 단위로만 메모리를 접근해야 한다.
  • Bit-band 영역 내의 메모리에 대한 비트연산이 빠르고 쉬워진다.
    • 이 기능을 이용하면 특정 주변장치의 제어레지스터의 제어비트나 상태비트를 비트단위로 쉽고 빠르게 변경 가능하다.
  • 따라서 주변장치의 동작제어를 효율적으로 할 수 있다.

사용 예제

  • 0x2000_0000 번지 워드 비트 3을 1로 set 하기
    • Read-Modify-Write operation 실행해야함.
      • Read the real address ( 0x2000_0000 )
      • Modify the desired bit ( retain other bits unchanged ! )
      • Write the modified data back
 ; Read-Modify-Write Operation
LDR     R1, =0x20000000  ; R1 = 0x20000000 (R1에 메모리 주소 저장) 
LDR     R0, [R1]         ; R0 = [R1] (메모리로 접근하여 그 값을 R0에 저장)
ORR.W   R0, R0, #0x8     ; R0 = R0 | 0x08 (R0의 3번째 비트를 1로 수정)
STR     R0, [R1]         ; [R1] = R0 (수정된 값을 다시 R1에 저장)
  • ARM에서는 Bit-band operation으로 Atomic하게 비트를 접근할 수 있다.
    • 주소 0x2200_000C 번지에 1을 저장하면 주소 0x2000_0000 의 비트 3이 1로 세팅됨.
; bit-band operation
LDR R1, =0x2200000C ; R1에 메모리 주소 저장 
MOV R0, #1 ; R0을 1로 설정
STR R0, [R1] ; R1이 가르키는 주소에 1을 저장
  • Bit-Banding 작동 원리
  1. Bit band 영역과 Bit Band Alias 영역이 1:1로 매핑
  • Bit-band 영역 ( 실제 메모리 영역 ) : 한번에 1byte씩 데이터 처리. 0x20000000 ~
  • Bit-band Alias 영역: Bit-band 영역의 각 비트를 1:1 매핑하여, 각 비트를 직접 제어할 수 있는 영역 0x22000000 ~
    • 0x22000000 + (Bit-Band 영역 주소 - 0x20000000) * 32(4byte)
  1. 0x2200000C 주소는 0x20000000 주소의 비트 3에 대응
  • 0x22000000 주소는 0x2000000 첫 번째 비트에 대응
  • 0x22000004 주소는 0x20000000 두 번째 비트에 대응
    • 0x22000007은 4바이트 단위로 매핑되는 Alias 주소의 규칙에 맞지 않기 때문에 존재하지 않습니다. 구체적으로, Alias 주소는 4바이트 간격으로 매핑되므로, 0x22000000, 0x22000004, 0x22000008과 같이 4바이트 간격으로 배치되며, 0x22000007과 같은 주소는 이 규칙에 맞지 않기 때문에 존재하지 않습니다.
  • 즉 각 4byte 마다 하나의 비트를 제어할 수 있는 공간이 할당됨.

Bit-Binding 장점

  • 보다 빠른 비트 연산
  • 인스트럭션 수가 줄어 에너지 절감
  • **원자형 동작으로 데이터 오류를 피할 수 있다. Atomic operation, avoid hazards.
    • 어떤 값에 대해 Read-Modifiy-Write 인스트럭션 실행 중 인터럽트가 발생한 경우, ISR에서 이 연산에서 사용중인 동일한 메모리를 접근하려는 경우, 데이터 연산에 오류가 발생할 수 있다. : 동시접근의 오류

Cortex-M4 프로그램 이미지

  • Vector table : 예외 핸들러의 시작 주소 ( vector ) , 최초 MSP 값

Cortex-M4의 리셋과정

arm 프로세서의 특징 중에서 cics 특성 ?
run타임에 줄었다 늘었다 -> 디버깅이 어렵다
스택이 얼마나 늘지 줄지 컴파일러가 모름 -> stack overflow

CPU내부에서는 레지스터 이름으로 접근

0개의 댓글