TI TMS320C30 float 타입에서 IEEE754 타입으로 컨버팅
TI(텍사스 인스루먼트)TMS320 계열의 DSP 칩은 IEEE 754 와 달리 지수 비트가 최상위 비트에 위치해 있지 않다. float 형의 경우 RAW Data 를 그대로 받아왔을때 IEEE754 로 변환 해주어야 한다.
기본적인 IEEE 754 규약을 간단하게 말하면
float 형의 경우 부호(sign)비트 1비트 지수(exponent) 비트 8비트 가수(mantissa) 나머지 24비트의 순서로 총 4Bytes 사이즈로 구성이 된다.
double 형의 경우 총 64비트 중 부호(sign)비트 1비트 지수(exponent) 비트 11비트 가수(mantissa) 나머지 52비트의 순서로 총 8Bytes 사이즈로 구성이 된다.
TI의 DSP 30 타입의 float형은 지수 비트와 가수 비트 사이에 부호비트를 넣고 있으며, IEEE754 타입과 비트사이즈가 동일하다. 이에 대해선 TMS320C30 의 레퍼런스를 참고 하기 바란다.
다음은 C30->IEEE754 컨버팅 코드소스이다.
float DasBuffer::convertToIeee ( int ControllerNum, int locate, char *value ) struct ieeefloat }; union ieee_union { union c30_union { memcpy ( c30.val, value, 4 ); /*Bnf Source*/ #if 0 gDebug.hprintln (Debug::LOG, "[convertToIeee] C:%d, locate:%d, c30(f:%08x,m:%d,s:%d,e:%d), ieee(i:%08x, m:%d,s:%d,e:%d)", return ( ieee.in ); |
테스트 용으로 IEEE->C30 컨버트 소스
struct c30float struct ieeefloat }; union ieee_union { union c30_union {
int IeeeToTi(float i , float *pFloat) printf(" ieee sign %d exponenet %d mentissa %d\n",ieee.str.sign, ieee.str.exponent, ieee.str.mantissa); printf(" c30 sign %d exponenet %d mentissa %d\n",c30.str.sign, c30.str.exponent, c30.str.mantissa); /*c30.str.sign = 1; printf(" c30 sign %d exponenet %d mentissa %d\n",c30.str.sign, c30.str.exponent, c30.str.mantissa); *pFloat = (float) c30.flt; return (1); //비트 검증 코드 void showbit(float value) } |