簡體   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