반응형
예를 들어 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 배열로 만들어 바이트 단위로 다시 풀어내야 한다^^;
반응형
'임베디드 개발 > TMS320F2838x (C28x)' 카테고리의 다른 글
| TMS320F28388D ] TI 제공 부트로더 사용해서 CPU2, CM application 다운로드하기 (0) | 2023.04.19 |
|---|---|
| TMS320F28388D ] TI 제공 부트로더 & Flash programmer 툴 사용하기 (3) | 2023.04.18 |
| TMS320F28388D ] Ethernet_resetModule() 무한루프 문제 (0) | 2023.03.31 |
| TMS320F28388D ] CM코어에 lwIP 포팅 (0) | 2023.03.31 |
| TMS320F28388D ] phy 레지스터 읽어 link status 감지하기 (2) | 2023.03.12 |