繁体   English   中英

ARM Cortex M3上的GCC:从特定地址调用函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM