我在一个嵌入式应用程序上工作,我需要在一个固定的内存地址上声明一个函数指针数组,然后在不同的.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文件中删除它,并且需要在各种.c文件中使用它,所以我这样声明:
extern p_intr_handler_t IntTable[95];
但是在尝试编译时,我收到一条错误消息:
“声明与“ p_intr_handler_t * IntTable”不兼容(在第3行声明)”
该消息适用于普通声明和外部声明。
任何想法有什么问题吗?
谢谢
最佳答案
为什么要用其他类型重新声明IntTable
?
只需将第一个定义保留在单个.c
中,然后在extern
中为其创建一个.h
即可将其包含在另一个.c
中,如下所示:
extern p_intr_handler_t * IntTable;
显然,仅当
VIM_RAM_BASE
已经以某种方式为您的数据保留时(即编译器不会尝试在其中放置其他数据),此方法才有效,否则,您应该查看编译器的文档以查看是否有办法告诉它将变量在内存中的特定位置。