본문 바로가기
임베디드 개발/TMS320F2838x (C28x)

C28x 코어의 32-bit 데이터 타입을 빅 엔디안/리틀 엔디안으로 변환

by eteo 2023. 4. 17.
반응형

 

 

예를 들어 float 변수에 3.14라는 값이 저장되어 있다고 하자. 이 값의 IEEE 754 부동소수점 표현은 다음과 같은 Hex 값이다.

 

 

 

  • 빅 엔디안(Big Endian) : 낮은 주소부터 MSB가 배치되므로 0x4048F5C3 형태가 된다.
  • 리틀 엔디안(Little Endian) : 낮은 주소부터 LSB가 배치되므로 0xC3F54840이 된다.

 

 

그렇다면 흔치 않은 C28x 코어 메모리에서는 어떻게 저장될까?
C28x는 CPU 최소 연산 단위인 워드 크기가 16-bit이고 리틀 엔디안 방식을 사용하기 때문에, 0xF5C3 4084와 같은 형태로 저장된다.

 

 

 

C28x 코어의 32bit 데이터 타입을 일반적인 8-bit 단위의 빅 엔디안/리틀 엔디안으로 변환할 때는 다음과 같은 방법을 쓸 수 있다.

 

void convert_C28x32_to_Big(void *src) {
    uint16_t *ptr = (uint16_t *)src;
    uint16_t temp;

    temp = ptr[0];
    ptr[0] = ptr[1];
    ptr[1] = temp;
}

 

void convert_C28x32_to_little(void *src) {
    uint32_t *ptr = (uint32_t *)src;
    uint32_t temp;

    temp = *ptr;
    *ptr = ((temp & 0xff000000) >> 8) | ((temp & 0x00ff0000) << 8) | ((temp & 0x0000ff00) >> 8) | ((temp & 0x000000ff) << 8);
}

 

 

그리고 이 값을 통신으로 전송해야 한다면, uint16_t 배열로 만들어 바이트 단위로 다시 풀어내야 한다^^;

 

 

 

반응형