如何在閃存中的特定內存位置寫入函數?有沒有指示?我需要特定的鏈接器嗎?如何在閃存中的特定內存位置寫入函數?有沒有指示?
回答
你使用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
使用ORG指令。
例如,對於一個功能在位置2000H
ORG 2000H
MY_FUNC:
: YOUR CODE HERE
RET
開始如果您正在使用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;
}
- 1. 將數組寫入到.hex文件中的特定閃存位置
- 2. 如何寫入內存位置?
- 3. DisplacementMapFilter沒有顯示在閃存中
- 4. 文件沒有保存在winforms中的指定位置c#
- 5. 指定內存位置沒有指針。刪除操作有什麼問題?
- 6. 如何爲指定位置存在或不存在的特定文件寫入Junit測試?
- 7. 沒有API的C++內存寫入
- 8. C++如何指定內存中的位置以獲取數據?
- 9. iPhone:如何在沒有泄漏內存的課程中存儲位置(CLLocationCoordinate2D)?
- 10. 在內部寫入at91sam7s256閃存
- 11. 爲什麼從內存寫入USB閃存指示硬盤使用?
- 12. 如何記錄何時寫入特定內存位置以及使用哪個函數?
- 13. 如何在物理內存中指定變量位置?
- 14. 內存屏障是否與某些特定的內存位置有關?
- 15. 如何在c#中的特定位置寫入數據?
- 16. 指向存儲在uint64_t中的內存位置的指針
- 17. 有沒有可能獲得函數的內存入口點?
- 18. 計算機如何確定在虛擬內存中寫入的位置?
- 19. php大小寫沒有內置函數
- 20. 有沒有辦法在unordered_map的特定位置插入元素?
- 21. 在沒有內置函數
- 22. laravel /閃存沒有顯示laravel 5.4
- 23. 爲什麼沒有直接訪問內存位置,如Java中的指針?
- 24. 讀取和寫入內存位置
- 25. xml數據沒有在閃存電影中顯示
- 26. 指向特定內存的函數指針
- 27. 在STM32上寫入閃存
- 28. 函數參數的內存位置
- 29. 函數指針如何指向內存中不存在的內容?爲什麼原型有不同的地址?
- 30. 在內存中讀取/寫入位
爲什麼要這樣做?你想使用中斷嗎?你正在使用組件還是C? –
應用程序是用於嵌入式編程的,我必須在特定的內存位置編寫一些功能,您能幫助我嗎? – AKASH
它看起來像我不能。 –