do_gettimeofday 함수 관련 질문.
do_gettimeofday 함수에 관하여 질문드립니다.
현재 1ms 간격으로 특정 하드웨어 장치에서 인터럽트를 발생하고 있습니다. ISR의 간격 시간을 구하기 위해서
struct timeval time1, time2;
typedef struct
{
unsigned gap; //isr간격 저장
unsigned max;
.......
}__attribure__((packed)) R_INT_INFO;
R_INT_INFO intbuffer[1];
인터럽트 서비스 함수
{
if(intcount == 0)
{
do_gettimeofday(&time1);
........
}
else if(intcount == 1)
{
do_gettimeofday(&time2);
........
}
else
{
if(intcount%2 == 0)
{
do_gettimeofday(&time1);
........
}
else
{
do_gettimeofday(&time2);
.........
}
}
intcount++;
return xxx;
}
ISR의 간격과 그 간격의 평균값, 최대치 최소치 등을 계산을 하여 intbuffer에 저장하는 역활을 위의 서비스 함수에서 하도록 되어 있습니다.
그리고 응용프로그램에서 open함수를 이용하여 디바이스 파을 열면 인터럽트가 등록되어 실행되고 read함수를 이용하여 데이터를 디바이스 드라이버로 부터 가져와서 계속적으로 출력을 합니다. (인터럽트는 전원이 인가되면 발생됨 - 서비스 함수 등록후 인터럽트 실행)
근데 문제가 생겼습니다.
출력시 최소값이 0이 나오길래 살펴 보았더니 time1 과 time2 의 값이 같아져 있는것을 확인하였습니다.
여기저기서 이런 현상이 왜 발생하는지 찾아 보았으나 찾을수가 없었고요
이런 원인에 대해서 알고 있는분 계시면 꼭좀 글 남겨주세요! 부탁드리겠습니다.
댓글 달기