[英]GCC on ARM Cortex M3: Calling functions from specific addresses
我需要从特定的地址调用函数(例如,C中的Double function indirect ),但不完全相同。 我可以从映射表中提取指针,并操纵动态生成的函数指针,我更希望避免这样做。 例如,我想避免这种类型的通话:
((int)(*)(void*)) compute_volume = ((int)(*)(void*)) 0x20001000;
int vol = (*compute_volume)();
相反,我宁愿使用某种链接器提供的符号或其他方法来实现以下目的,不同之处在于, compute_volume()
函数是由不同的图像提供的,也许是这样的:
extern int compute_volume(void);
vol = compute_volume();
换句话说,我打算将我的代码拆分为多个图像,从而减少每次符号或计算发生更改时修改或覆盖闪存的需求。
有什么建议/想法吗?
您可以定义跳转表,该跳转表将始终位于相同的Flash区域中(您可以在我认为的代码中的链接器和编译指示中定义该区域),并在调用时跳转到所需的功能。
在固件第一部分中,您仅定义了引用“传递”功能地址的符号(如果始终将其保留在同一区域中,则将使以后的更新更加容易)。 在固件第二部分中,您将创建跳转表,该表位于固件第一部分中所指的地址空间中,并调用实际功能。
我不确定100%正确地描述了它,但是这应该给您一些解决问题的方法。 提供的链接Ø环应有助于将跳转表代码放在一个位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.