2015-05-25 26 views
0

如何在閃存中的特定內存位置寫入函數?有沒有指示?我需要特定的鏈接器嗎?如何在閃存中的特定內存位置寫入函數?有沒有指示?

+0

爲什麼要這樣做?你想使用中斷嗎?你正在使用組件還是C? –

+0

應用程序是用於嵌入式編程的,我必須在特定的內存位置編寫一些功能,您能幫助我嗎? – AKASH

+0

它看起來像我不能。 –

回答

0

你使用keil工具鏈嗎?
如果是,可能http://www.keil.com/support/docs/359.htm有幫助。

編輯: .obj文件由編譯器生成。我不確定你的意思是'我如何配置.obj文件'

上面提到的鏈接器使用obj文件,將它們鏈接在一起並放置代碼和變量。

你應該從一個編譯和鏈接沒有錯誤的項目開始。 然後你有:
- 一些c文件。其中一個與你的功能。
- 包含鏈接器設置的鏈接文件。
- makefile或某種批處理文件,它用必要的參數調用編譯器和鏈接器。

如果你有這個,你可以查看m51文件中的函數符號名稱。 m51文件是lx51鏈接程序生成的一個文本文件,其中包含有關哪些符號存在以及鏈接程序與它們做了什麼的有趣信息。

我提到的連接器的keil文檔說:編譯器使用以下格式爲該函數創建一個符號名稱:?PR?function_name?file_name。

這意味着:您可以在m51文件中找到項目中所有函數的名稱。如果你的函數在文件file_x中並且被命名爲func_x。符號名稱爲PR?func_x?file_x

http://www.keil.com/support/man/docs/lx51/lx51_segments.htm中,您可以找到關於lx51鏈接器的SEGMENTS指令的用法的一些信息。據此:

SEGMENTS (PR?func_x?file_x(C:0x1234)) 

應該把你的函數地址0x1234在代碼內存。

其實我沒有keil toolchain。所以我無法測試所有這一切。 但是我相信如果你從一個簡單的工作例子開始,你可以自己管理它,逐步改變事情並檢查發生了什麼。

祝你好運。
Helmut

+0

謝謝赫爾穆特,但你能告訴我怎麼可以配置obj文件的編譯器會照顧那個 – AKASH

+0

M51的文件,這就是我想要的,謝謝 – AKASH

0

使用ORG指令。

例如,對於一個功能在位置2000H

ORG 2000H 
MY_FUNC: 
: YOUR CODE HERE 
RET 
0

開始如果您正在使用KEIL IDE您可以使用.ARM .__ at_address作爲段名特定地址放置函數。要將函數add添加到0x20000,請指定:

int add(int n1,int n2) __attribute__((section(".ARM.__at_0x20000"))); 
int add(int n1,int n2) 
{ 
    return n1+n2; 
} 
相關問題