PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
ASM
Re: [問題] 程式載入記憶體問題
作者:
godspeedlee
(妳,我可以)
2018-05-21 13:35:32
※ 引述《wei115 (ㄎㄎ)》之銘言:
: 在沒有作業系統的裝置上(我用的是STM32F104)
: 假使我的程式指令放在只讀的ROM上
: 那我在執行時,要怎麼
: 把可讀可寫的變數和堆疊丟到RAM上?
: 看了一些資料,好像寫連結腳本可以解決?
: 但想想不是阿,連結腳本只是指定哪些資料要放在ROM上,哪些資料要放在RAM上
: 他沒有實際把資料作搬移的工作
: 開機時會要把函式丟到記憶體上並設定堆疊暫存器(以便函式呼叫)
: 並且要把可讀可寫的區段搬移到記憶體上
: 所以編譯器有加入實際搬移的code?讓我在我的程式執行前做好這些工作?
: 有沒有相關資料或關鍵字可供參考,謝謝
如果你是用 Keil C,他會把 scatter loader 連結到你的程式中,
boot 後 .sct 怎麼排他就怎麼搬。
10年前我寫 ARM7 時,還得自己寫一小段組語處理以下區段:
Image$$RW, Image$$ZI
這兩個區段就是 global variables, static variables
現在其實還是有人手動處理,尤其是那些自己開IC的
如果你想 DIY,可以參考下面這篇文章
http://wiki.csie.ncku.edu.tw/embedded/Lab19/stm32-prog.pdf
作者:
wei115
(ㄎㄎ)
2018-05-21 14:10:00
感謝,我其實看的就是這篇文章,不過我對搬移的地方不太明白,所以才上來問
作者:
godspeedlee
(妳,我可以)
2018-05-21 14:27:00
總之那些已經有初始變數的一定會從ROM搬移過去如果是const,就留在ROM裡,但如果是SPI Flash通常還是得通通搬移到RAM裡
作者:
wei115
(ㄎㄎ)
2018-05-21 19:07:00
這我知道,但實際上是怎麼做的,程式怎麼寫的,感覺還是很模糊像如果我把一個函式複製到了RAM上,然後我再呼叫這個函數,那程式要怎麼知道要執行ROM上的函式還是RAM上的函式?
作者: supertitler (新的開始)
2018-05-21 19:39:00
linking就決定了 region的初始化是compiler幫你處理的 用keil的話regionTable裡面也有link各種初始函式 可以去找找看
作者:
godspeedlee
(妳,我可以)
2018-05-22 12:14:00
看來你缺少relocation的概念你的問題可以把PC值dump出來就清楚了keil編譯完有個.map,不知道你看過沒?
作者:
wei115
(ㄎㄎ)
2018-05-23 01:08:00
感謝回覆,我是用jserv課程的gnu工具,沒用過keil.....然後我想我還是缺少了某些概念,讓我的思考一直鬼打牆,我還是再去研究看看目標文件的結構好了....如果有什麼推薦的資料或關鍵字的話,還請大大不吝提供,謝謝^_^
作者:
godspeedlee
(妳,我可以)
2018-05-23 16:12:00
http://www.books.com.tw/products/0010456858
這本可以找來看看相較於keil,gnu很多要自己來,理論上觀念應該要比用keil的人清楚...你可以去找一下系統程式的教科書,或者嘗試自己寫一個elf loader,對了解這個問題應該有幫助
繼續閱讀
[問題] 程式載入記憶體問題
wei115
[問題] arduino nano 編譯錯誤
a27572171
[問題] Arduino編譯錯誤
yimean
[問題] 開發版arduino uno編譯錯誤(函式庫錯誤,是否得學寫函式庫?)
lensfill
[問題] arduion變數監看問題
yimean
[閒聊] 為何版名是組語匯編版 但都在討論單片機
KILLE
[問題] 如何看懂反組譯後的x86組語
EijiHoba
[問題] ARM的討論區
zzss2003
Re: [問題] 如何讓Arduino在I2C連續送出Stop Signal?
kitconan
[問題] Genuino101 CurieTimerOne 問題
glugluboom
Links
booklink
Contact Us: admin [ a t ] ucptt.com