【发布时间】:2014-08-13 07:30:30
【问题描述】:
为了在主机上对嵌入式项目进行单元测试,我开始使用函数指针来在函数的“真实”实现和运行时的模拟之间进行切换。 所以,我的函数 'foo' 在 .c 文件中看起来像这样:
// the 'real' implementation of the function to be used during runtime
void fooImplementation ( )
{
/* ... */
}
// the function pointer, initialized to the 'real' implementation
void (*foo) ( ) = fooImplementation;
发现目标处理器(Blackfin)产生异常,因为函数指针驻留在内部L1数据存储器中,不允许携带代码,只能携带数据。
一种可行的解决方案是为每个函数指针分配一个属性,以便将其放入不位于 L1 数据存储器中的不同部分,例如:
void (*foo) ( ) __attribute__ (( section(".ext_mem"))) = fooImplementation;
但这会使代码有点难以阅读并且容易出错(如果您忘记分配属性,单元测试将运行良好,但代码会在目标上调用该函数时立即生成异常) .
所以我的问题是,是否有办法告诉 gcc 默认将所有函数指针指向不同的部分。
【问题讨论】:
标签: c pointers gcc embedded linker-scripts