向各位请教一qnx中断问题。我现在在写一驱动程序,涉及到中断响应例程。程序在第一遍运行时一切正常,但是在运行结束退出后,再次运行时,系统总是死机。找了很久不知错误出自何处,但怀疑是系统退出时没有做好中断善后处理工作,请各位帮个忙。谢谢!
另外在无中断的情况下,怎样让InterruptWait退出等待状态(不使用TimerTimeout)?
中断响应例程:
void* ACNET_INT_THREAD(void*)
{
// Hardwarezugriff erlauben
if(ThreadCtl(_NTO_TCTL_IO, 0) == -1)
{
return NULL;
}
SIGEV_INTR_INIT(&m_event);
m_id = InterruptAttachEvent(_NTO_INTR_CLASS_EXTERNAL + IntNo, &m_event, _NTO_INTR_FLAGS_TRK_MSK);
if(m_id == -1)
{
printf(“InterruptAttach failed\n”);
return NULL;
}
while(m_bStop == false)
{
// Warte auf Interrupt
if(InterruptWait(0, NULL) == -1)
{
continue;
}
HP324_ARC_Int_Bearbeiter();
InterruptUnmask(_NTO_INTR_CLASS_EXTERNAL + IntNo, m_id);
}
return NULL;
}
中断善后处理代码为:
m_bStop = true;
if(m_id != 0)
{
InterruptDetach(m_id);
}
if(m_hIntThread != NULL)
{
clock_gettime(CLOCK_REALTIME, &tTimeout);
tTimeout.tv_sec += 5; //5 seconds
//等待中断响应函数线程结束
if(pthread_timedjoin(m_hIntThread, NULL, &tTimeout) == ETIMEDOUT)
{
pthread_abort(m_hIntThread);
}
m_hIntThread = NULL;
}