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将为零,但启动中断具有双精度值。

警告:此行有多个标记
    -未解决的断点


有人可以帮我吗?

最佳答案

好。如果InterruptLatency类型不是int64_t,请使用此printf("Inerrupt latency is %lu",InterruptLatency);

实际上,在InterruptLatency中使用正确的pintf("Inerrupt latency is %Type_of_InterruptLatency",InterruptLatency);类型

08-07 04:16