我正在研究一个嵌入式应用程序,我需要在固定的内存地址上声明一个函数指针数组,然后在不同的.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