c - 通过另一个项目的映射文件中的地址调用函数

标签 c pointers gcc linker coocox

大家好,这是我的问题。

我有两个不同的项目,第一个有一个映射如下的链接器文件:

MEMORY
{
    rom (rx)  : ORIGIN = 0x08000000, LENGTH = 0x0000C400 
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

第二个链接器文件如下:

MEMORY
{
    rom (rx)  : ORIGIN = 0x0800C400, LENGTH = 0x00019CFC 
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

这两个项目都运行在同一个 MCU 上,并分别烧录在闪存中。在我的第二个项目中,我想将指针映射到第一个项目中声明的函数上。我尝试了下面的代码,但它不起作用,在执行调试器告诉我找不到该符号,但根据第一个项目的.map文件,地址(0x0800458C)映射到我想要使用的函数上.

uint32_t (*Myfunction)(void);

int main(void)
{
    Myfunction = ((uint32_t(*) (void)) 0x0800458C); // address in the first project
    Myfunction();
} 

有人有过这样的经历吗? 谢谢!!

编辑:当直接在项目中包含 .symbols 文件时,它似乎可以与 Keil IDE 一起使用。但对于 CoIDE(基于 eclipse)它不起作用。我仍在尝试解决这个问题。

最佳答案

你尝试过这个吗: Linker script: insert absolute address of the function to the generated code

我认为最后一个答案可能就是您想要的。

关于c - 通过另一个项目的映射文件中的地址调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44070469/

相关文章:

c++ - C++中的事件调度

malloc 在 struct 上的 C 用法

c - 尝试将数据从一个结构复制到另一个结构时出现段错误

macos - 包括带有 -all_load 标志的静态库

ubuntu - 从源代码构建 llvm 3.42 时 gcc 崩溃(使用 cmake)

c - 段错误(核心已转储),使用动态 vector

c stdlib.h 中 RAND_MAX 和 rand() 的说明

c++ - 固有滴答计数,无需外部 api 的良好性能测量

c - 当我在增加指针后使用 strlen() 时会发生什么?

c++ - 简单的继承——奇怪的编译错误