ARM 에서 double 형 연산 문제

churli의 이미지

임베디드 환경에서 타이머로 시간 측정을 하는 함수를 구현 하는데 아래와 같은 문제가 있습니다.

CPU : OMAP2420(ARM1136 core)
COMPILER : CodeSourcery G++ Lite (EABI) ARM Cross Compiler

int main()
{
double val;

val = get_time(); <<== val 값이 항상 0.0 이 들어 옵니다.

return 0;

}

double get_time(void)
{
unsigned long long nMsec;
nMsec = (unsigned long long) (*((volatile unsigned long*)(0x50000000))); <== 타이머 카운트값 읽기

nMsec *= 1000ULL;
return (double)(nMsec / 32768ULL);
}

왜 리턴 값이 항상 0.0 으로 리턴 되는지를 모르겠습니다.
조언 부탁 드립니다. 꾸벅

dorado2의 이미지


nMsec 값을 32768ULL로 나눈 후에 double 캐스팅하지 마시고,

nMsec 값을 double 형으로 먼저 캐스팅한 후에 나누세요.

churli의 이미지

도움 감사합니다.
미련하게 컴파일러 탓만 하고 있었던 제가 정말 한심하네요.
C 다시 공부해야 할거 같습니다. 도움 정말 감사 드립니다.