시리얼라이제이션은 데이터를 전송 가능한 형태로 변환하는 과정을 의미한다.
임베디드 시스템에서는 16비트 이상의 큰 데이터를 처리할 수 없는 경우 이를 두 개의 8비트로 나누어 전송하거나 저장하는 방식을 사용한다.
16비트를 8비트로 나누기
#include <stdint.h>
#include <stdio.h>
int main() {
// 16비트 값
uint16_t value = 0xABCD;
// 16비트 값을 상위 바이트와 하위 바이트로 나눔
uint8_t highByte = (value >> 8) & 0xFF; // 상위 바이트 추출
uint8_t lowByte = value & 0xFF; // 하위 바이트 추출
// 상위 바이트와 하위 바이트 출력
printf("Original 16-bit value: 0x%04X\n", value);
printf("High byte: 0x%02X\n", highByte);
printf("Low byte: 0x%02X\n", lowByte);
// 상위 바이트와 하위 바이트를 합쳐서 원래의 16비트 값 복원
uint16_t reconstructedValue = (highByte << 8) | lowByte;
// 복원된 값 출력
printf("Reconstructed 16-bit value: 0x%04X\n", reconstructedValue);
return 0;
}
코드 설명
- 16비트 값을 정의:
- uint16_t value = 0xABCD;로 16비트 값을 정의한다. 여기서 0xABCD는 예시로 사용된 값이다.
- 상위 바이트와 하위 바이트 분리:
- 상위 바이트는 highByte = (value >> 8) & 0xFF;로 추출한다. 이 과정에서 value를 8비트 오른쪽으로 쉬프트하고, & 0xFF를 사용해 상위 8비트만 남기다.
- 하위 바이트는 lowByte = value & 0xFF;로 추출합니다. & 0xFF는 하위 8비트를 얻기 위해 사용된다.
- 원래 값 복원:
- 상위 바이트와 하위 바이트를 조합하여 원래 16비트 값을 복원한다. reconstructedValue = (highByte << 8) | lowByte;를 사용한다. 여기서 highByte << 8은 상위 바이트를 8비트 왼쪽으로 이동시키고, | lowByte로 하위 바이트를 합쳐준다.
시리얼라이제이션의 활용 사례
1. 16비트 이상의 데이터를 시리얼 포트를 통해 전송할 때 8비트 단위로 나누어 전송해야 하는 경우에 호환성을 유지하기 위해 상위 1바이트와 하위 1바이트를 나누어 전송한다.
2. 8비트 마이크로 컨트롤러와 같은 메로리 자원이 제한된 시스템에서는 큰데이터를 작은 단위로 나누어 처리하는 것이 필수적이다.
3. 서로 다른 아키텍처 간의 데이터 전송 시, 데이터의 크기를 맞추기 위해 데이터를 8비트 단위로 나누는 것이 필요할 수 있다. 따라서 서로 다른 시스템 간의 데이터 전송에서 발생할 수 있는 문제를 최소화할 수 있다.
댓글