从另一个项目的映射文件中通过地址调用函数
Function call by address from map file of another project
大家好,这是我的问题。
我有两个不同的项目,第一个有一个链接器文件映射如下:
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上,分别烧录在flash中。在我的第二个项目中,我想将指针映射到第一个项目中声明的函数上。我尝试了下面的代码但它不起作用,在执行时调试器告诉我找不到该符号,但根据第一个项目的 .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
我想最后的答案可能就是您要找的。
大家好,这是我的问题。
我有两个不同的项目,第一个有一个链接器文件映射如下:
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上,分别烧录在flash中。在我的第二个项目中,我想将指针映射到第一个项目中声明的函数上。我尝试了下面的代码但它不起作用,在执行时调试器告诉我找不到该符号,但根据第一个项目的 .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
我想最后的答案可能就是您要找的。