繁体   English   中英

如何在特定存储位置的C中设置函数的地址

[英]How to set the address of a function in C in a specific memory location

由于我使用的是嵌入式系统,因此需要将特定功能存储在地址为0x840140的外部存储位置中

这是函数:

//The function that I want to set its address to 0x840140
float myfunction(float x,float y) {
  float z;
  z=x+y;
  return z;
 }


 void main() {
  float w;
  //Calling the function
 w=myfunction(5.5,10.5);      
 }

Xilinx“ MicroBlaze”似乎正在使用基于GNU CC的编译器,这意味着(可能)使用了gnu ld链接器。 它具有相当广泛的脚本语言 ,因此,例如,不同的代码段可以位于不同的位置。

如果您不希望所有代码都放在一个块中,则需要为有问题的函数“设置”一个部分,例如:

void myfunction (void) __attribute__ ((section ("at840000.text")));

然后使用text.at840000告诉链接器您要将代码放置在何处。

像这样:

SECTIONS {
  at840000.text 0x840000 { * }
}

(我不确定这里的确切语法是100%,但是有些类似的地方)

您确定要将功能存储在特定的存储位置吗? 您可能只需要函数结果。

void main() {
  float *w = (float*)0x840140;
  //Calling the function
  *w=myfunction(5.5,10.5);      
}

这会将myFunction()返回的浮点数放置在正确的内存位置。

免责声明:我从来没有尝试过。

使用链接脚本可能是可能的。 本文将代码放置在用于构建内核的特定地址处。 检查有关“链接部分”的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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