본문 바로가기
프로그래밍 언어/C++

[임베디드/펌웨어] Bitmap Based 연산 예시

by 까망 하르방 2024. 12. 1.
반응형

Bitmap Based

= 2진수로 표현했을 때 비트(bit) Set / Clear 여부로 표현

 ex) 0xFFFF → 1111'1111'1111'1111 → 16개로 표현

 

FLASH 이나 RAM 의 저장공간은 역할에 맞게 크기가 정해져 있다.

펌웨어에서는 저장 공간 영역을 'Bitmap Based' 처리하는 경우가 많다.

* 공간 크기를 이진수를 활용해서 효과적으로 표현하기 위함


<예시>

메모리 공간 0x0 ~ 0x2000

해당 공간을 0x0000 ~ 0xFFFF 로 표현할 수 있다고 해보자.

 

LSB 부터 각 비트에 mapping 되는 메모리 "시작 주소"를 계산해보면

전체 영역 0x2000 (= 8KB = 8,192) 공간을 16 등분 했다고 볼 수 있다.

 

8192 / 16 = 512 Byte

bitmap 계산

 

 

각 비트가 512 Byte 크기로 표현할 수 있다.

이를 기반으로 각 Bit의 Start Address를 짐작할 수 있다.

①| 0x0 → 0x200 → 0x400 → 0x600

②| 0x800 → 0xA00 → 0xC00 → 0xE00

③| 0x1000 → 0x1200 → 0x1400 → 0x1600

④| 0x1800  → 0x1A00 → 0x1C00 → 0x1E00

Start Address = Base Address + (Offset Size * (LSB - 1))

 

 

윈도우 계산기 (프로그래머용)

프로그래머용 계산기 Windows OS에서는 기본적으로 계산기를 제공한다. 제공되는 계산기에는 여러버전이 존재하며, 이름에서도 알 수 있듯이 목적에 맞게 나름의 기능을 제공해준다. 프로그래머

zoosso.tistory.com


Q) 0x5 일 때, 메모리 시작 주소는?

0x5 → 0000'0000'0000'0101

LSB = 1 이므로 (0x200 * (1 - 1)) =  0x0 부터 시작

▶0x0~0x200과 0x400~0x600 영역 사용

 

 

Q) 0xF0 일 때, 메모리 시작 주소는?

0xF0 → 0000'0000'1111'0000

LSB = 5 이므로 (0x200 * (5 - 1)) =  0x800 부터 시작

0x800~0x1000 까지 2KB (= 2,048 Byte) 사용

 

 

Q) 이를 코드로는 어떻게 구현해볼 수 있을까?

① LSB에 해당하는 Bit 찾기

② Base Address 와 Offset Address 이용하여 Start Address 계산

 

 

📌 [C] 로그(log) 함수

 

[C] 로그(log) 함수

C / C++ 언어에서 비트연산이나 코딩 문제를 풀다보면 수학 관련 문제를 푸는 경우가 있다. C언어에서도 #include 로 밑이 다양한 로그함수를 제공한다. 함수 오버로딩(Overloading)이 안되기 때문에 매

zoosso.tistory.com

 

 

📌 [C++] 로그(log) 함수

 

[C++] 로그(log) 함수

C언어와 달리 C++은 함수 오버로딩이 가능하다. 그렇기에 자료형 상관없이 하나의 함수명으로 처리 가능하다. 필요한 헤더파일 #include 밑이 e 인 로그 함수 (자연 로그) - double log(double n); - float log(

zoosso.tistory.com

반응형

댓글