【发布时间】:2017-12-28 00:57:40
【问题描述】:
我需要从特定地址(例如Double function indirection in C)调用函数,但不完全相同。我可以从映射表中提取指针并操作动态生成的函数指针,我希望避免这种情况。例如,我想避免这种类型的调用:
((int)(*)(void*)) compute_volume = ((int)(*)(void*)) 0x20001000;
int vol = (*compute_volume)();
相反,我更愿意使用某种链接器提供的符号或其他方法来实现以下目的,除了 compute_volume() 函数由不同的图像提供,可能是这样的:
extern int compute_volume(void);
vol = compute_volume();
换句话说,我打算将我的代码拆分为多个图像,从而减少每次符号或计算更改时修改或覆盖闪存的需要。
有什么建议/想法吗?
【问题讨论】:
-
函数指针就是为此而设计的。但是,如果语法困扰您,在这种情况下,您可以使用
#define或 typedef -
请注意,与每次重写整个闪存相比,这不会为您提供更多更新周期,因为微控制器闪存没有磨损均衡。