我正在研究一個嵌入式應用程序,我需要在固定的內存地址上聲明一個函數指針數組,然後在不同的.c文件中使用它。我想到的是:函數指針的外部數組固定內存地址
typedef void(__irq __arm * p_intr_handler_t)(void);
p_intr_handler_t * IntTable = (p_intr_handler_t *)&VIM_RAM_BASE;
p_intr_handler_t IntTable[95];
VIM_RAM_BASE是地址。我在main.f文件delcare這一點,我需要在各.c文件中使用它,所以我宣佈它是這樣的:
extern p_intr_handler_t IntTable[95];
不過,雖然試圖編譯我得到一個錯誤信息: 「聲明是不兼容與「p_intr_handler_t * IntTable」(在第3行聲明)「 該消息適用於正常和extern聲明。
任何想法有什麼不對?
感謝
你說得對,我其實宣佈了兩次。不知何故,我覺得我需要暗示大小是96 ...無論如何,我做了你說的,現在我得到這個消息:'p_intr_hadler_t * IntTable =(p_intr_hadler_t *)&VIM_RAM_BASE;'這個表達式必須有一個常量值和'extern p_intr_hadler_t * IntTable;'是未定義的...即使我將.h鏈接了。 – user1267031 2012-03-13 17:25:16
如何定義「VIM_RAM_BASE」?可能你不需要'&'。另外,您不得「鏈接」.h,但將其包含在相關的「.c」中。 – 2012-03-13 17:44:37
它定義如下:'__IO_REG32(VIM_RAM_BASE,0xFFF82000,__ READ_WRITE);'和IO_REG32像這樣'#define __IO_REG32(NAME,ADDRESS,ATTRIBUTE)\ volatile __no_init ATTRIBUTE unsigned long NAME @ ADDRESS'。通過鏈接我的意思包括。 extern表達式位於.h文件中,該文件包含在相關的.c文件中,但該錯誤已存在於.h中,其中extern是。 – user1267031 2012-03-13 18:01:20