int id1; //variables used in the isr should be volatile
int chid;
void *ConfigureISR(void) //void *ISR (void *arg)
{
/* the software must tell the OS that it wishes to associate the ISR with a particular source of interrupts
* / * On x86 platforms, there are generally 16 hardware Interrupt Request lines (IRQs) */
StartInterruptTime = GetTimeStamp(); //startTime of the interrupt
// volatile int irq = 11; //0 : A clock that runs at the resolution set by ClockPeriod()
// InterruptEnable();
ThreadCtl (_NTO_TCTL_IO, NULL); // enables the hardware interrupt
// Initialize event structure
//
// Setup COID and event
//
/* Tell the kernel to attach an interrupt signal event to this thread */
// chid = ChannelCreate( 0 );
SIGEV_INTR_INIT( &event);
//id1 = InterruptAttach(0, ISR, NULL, 0, 0); // ISR is the interrupt service routine
id1 = InterruptAttach(_NTO_INTR_CLASS_SYNTHETIC, ISR, NULL, 0, 0);
if (id1 == -1)
{
fprintf(stderr, "can't attach to IRQ\n");
perror (NULL);
exit (EXIT_FAILURE);
}
while(1)
{
InterruptWait(NULL, NULL);
}
EndInterruptTime = GetTimeStamp();
InterruptLatency = (EndInterruptTime - StartInterruptTime);
printf("Inerrupt latency is %llu",InterruptLatency); //I am getting warning
measurements[17] = InterruptLatency;
}
我在另一个.c程序中获取StartInterruptTime并在上面的程序中使用该时间戳来计算两者之间的差异(即InterruptLatency)。我在调试程序时收到以下警告,并且EndInterruptTime也为零,但启动中断具有double值。
WARNING : Multiple markers at this line - Unresolved breakpoint有人可以帮助我吗?
答案 0 :(得分:0)
确定。如果InterruptLatency
类型不是int64_t
,请使用此printf("Inerrupt latency is %lu",InterruptLatency);
。
事实上,在InterruptLatency
pintf("Inerrupt latency is %Type_of_InterruptLatency",InterruptLatency);