도와주세요!!
글 수 15,339
2003.01.21 23:13:27 (*.192.84.137)
6678
제가 실력이 많이 모자라서 다른 분들의 조언을 구하고져...이렇게 질문을 드
립니다.
인터럽트 처리를 하는데...약간은 서비스 루틴이 길어져 , bottom halves를
이용하여 top과 bottom으로 나누어서 디바이스 드라이버 작업을 하고 있습니
다. 디바이스 드라이버내 선언에 static struct tq_struct tq_exe; 으로 선언
해주었고요, request_irq 부분에 등록되어 있는 handler함수내에
queue_task(&tq_exe,*tq_immediate); mark_bh(IMMEDIATE_BH);로 해주었습니다.
또, tq_struct의 routine필트에 인터럽트 처리 함수를 등록해주었습니다.
그런데 인터럽트가 한번 걸리고 나서 서비스 루틴에서 처리하고 있을때 다시
인터럽트가 걸리면, 그다음 인터럽트는 처리 되지 않고 첫번째 인터럽트만 처
리하고 그다음 인터럽트는 처리하지 못하고 죽어 버립니다.
혹시...긴 인터럽트 처리 루틴 처리시, 처리 도중에 또 다른 인터럽트가 발생
했을경우 어떻게 처리하는지 조언 부탁드립니다.
립니다.
인터럽트 처리를 하는데...약간은 서비스 루틴이 길어져 , bottom halves를
이용하여 top과 bottom으로 나누어서 디바이스 드라이버 작업을 하고 있습니
다. 디바이스 드라이버내 선언에 static struct tq_struct tq_exe; 으로 선언
해주었고요, request_irq 부분에 등록되어 있는 handler함수내에
queue_task(&tq_exe,*tq_immediate); mark_bh(IMMEDIATE_BH);로 해주었습니다.
또, tq_struct의 routine필트에 인터럽트 처리 함수를 등록해주었습니다.
그런데 인터럽트가 한번 걸리고 나서 서비스 루틴에서 처리하고 있을때 다시
인터럽트가 걸리면, 그다음 인터럽트는 처리 되지 않고 첫번째 인터럽트만 처
리하고 그다음 인터럽트는 처리하지 못하고 죽어 버립니다.
혹시...긴 인터럽트 처리 루틴 처리시, 처리 도중에 또 다른 인터럽트가 발생
했을경우 어떻게 처리하는지 조언 부탁드립니다.