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
각 비트가 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))
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++' 카테고리의 다른 글
[C++] Global Namespace (글로벌 네임스페이스) (5) | 2024.12.19 |
---|---|
[C++] 네임스페이스(namespace) 활용 (0) | 2024.12.18 |
[C/C++] packed 키워드 (3) | 2024.11.16 |
[C++] likely, unlikey 키워드 구문 (5) | 2024.11.10 |
[C/C++] 패딩 비트 (Padding Bit) (2) | 2024.11.09 |
댓글