C undeclared(first use in this function)错误

C undeclared(first use in this function) error

我正在 NIOS II SBT 上为 Eclplise 编写一个 C 程序来处理 DE2 板上的按钮中断,这并不重要,但我将 运行 保留在这个错误中 'keys_irq' 未声明(首先在此函数中使用)错误。我不知道我做错了什么。

volatile int keys_edge_capture;
static void keys_int_init() {
    void* keys_edge_capture_ptr = (void*) &keys_edge_capture;
    // Enable all three keys as interrupt
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PUSH_BUTTONS_BASE, 0x0F);
    // Reset edge capture register
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PUSH_BUTTONS_BASE, 0x00);
    // Register ISR and place it on the interrupt table
    alt_ic_isr_register(PUSH_BUTTONS_IRQ_INTERRUPT_CONTROLLER_ID, PUSH_BUTTONS_IRQ,keys_irq, keys_edge_capture_ptr, 0x00);
}
void keys_irq(void* context) {
    // Recast context to keys_edge_capture type
    volatile int* keys_edge_capture_ptr = (volatile int*) context;
    // Read the edge capture to determine what triggered the interrupt
    *keys_edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(PUSH_BUTTONS_BASE);

    if (*keys_edge_capture_ptr & 0b0100) // extract KEY2
        *(red_leds) = *(switches);
    else if (*keys_edge_capture_ptr & 0b1000) { // extract KEY3
       //do something
    }

    // clear the edge capture register
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PUSH_BUTTONS_BASE, 0x00);

    // dummy instruction to synchronize the handler

    IORD_ALTERA_AVALON_PIO_EDGE_CAP(PUSH_BUTTONS_BASE);
    return;
}

int main()
{

    int SW_Value,Keys_Val;
    int mask = 0xF;


    while(1){
        SW_Value = *(switches) & mask;
        *(green_leds) = SW_Value;
         keys_int_init();
    }


  return 0;
}

函数 keys_int_init 正在调用对 keys_irq 的引用。由于 keys_irq 尚未定义,编译器不知道函数是什么。为了避免这种情况,您可以在文件的开头添加一个叫做 prototype 的东西,在定义 keys_int_init 之前。

void keys_irq(void* context);

这告诉编译器函数是什么类型,所以它知道如何处理它。