gpt4 book ai didi

c - ARM Cortex M3 上的 GCC : Calling functions from specific addresses

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:10 26 4
gpt4 key购买 nike

我需要从特定地址(例如 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();

换句话说,我打算将我的代码拆分成多个图像,从而减少每次符号或计算更改时修改或覆盖闪存的需要。

有什么建议/想法吗?

最佳答案

您可以定义跳转表,它始终驻留在同一闪存区域(我认为您可以在代码中的链接器和编译指示中定义该区域),并在调用时跳转到所需的函数。

在固件第 I 部分中,您只定义引用“传递”函数地址的符号(如果您始终将其保留在同一区域中,它将使以后的更新更加容易)。在固件第 II 部分中,您创建跳转表,它位于您在固件第 I 部分中引用的地址空间中,并调用实际函数。

我不能 100% 确定我的描述是否正确,但这应该让您了解如何解决您的问题。提供的链接 Ring Ø 应该可以帮助您将跳转表代码放在一个地方。

关于c - ARM Cortex M3 上的 GCC : Calling functions from specific addresses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48000375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com