Re: [問題] 程式載入記憶體問題

看板ASM (組合語言)作者 (妳,我可以)時間6年前 (2018/05/21 13:35), 編輯推噓3(3022)
留言25則, 3人參與, 6年前最新討論串2/4 (看更多)
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.42.66 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1526880937.A.944.html

05/21 14:10, 6年前 , 1F
感謝,我其實看的就是這篇文章,不過我對搬移的地方不太明
05/21 14:10, 1F

05/21 14:10, 6年前 , 2F
白,所以才上來問
05/21 14:10, 2F

05/21 14:27, 6年前 , 3F
總之那些已經有初始變數的一定會從ROM搬移過去
05/21 14:27, 3F

05/21 14:27, 6年前 , 4F
如果是const,就留在ROM裡,但如果是SPI Flash
05/21 14:27, 4F

05/21 14:28, 6年前 , 5F
通常還是得通通搬移到RAM裡
05/21 14:28, 5F

05/21 19:07, 6年前 , 6F
這我知道,但實際上是怎麼做的,程式怎麼寫的,感覺還是
05/21 19:07, 6F

05/21 19:07, 6年前 , 7F
很模糊
05/21 19:07, 7F

05/21 19:10, 6年前 , 8F
像如果我把一個函式複製到了RAM上,然後我再呼叫這個函數
05/21 19:10, 8F

05/21 19:10, 6年前 , 9F
,那程式要怎麼知道要執行ROM上的函式還是RAM上的函式?
05/21 19:10, 9F

05/21 19:39, 6年前 , 10F
linking就決定了 region的初始化是compiler幫你處理
05/21 19:39, 10F

05/21 19:39, 6年前 , 11F
的 用keil的話regionTable裡面也有link各種初始函
05/21 19:39, 11F

05/21 19:39, 6年前 , 12F
式 可以去找找看
05/21 19:39, 12F

05/22 12:14, 6年前 , 13F
看來你缺少relocation的概念
05/22 12:14, 13F

05/22 12:15, 6年前 , 14F
你的問題可以把PC值dump出來就清楚了
05/22 12:15, 14F

05/22 12:22, 6年前 , 15F
keil編譯完有個.map,不知道你看過沒?
05/22 12:22, 15F

05/23 01:08, 6年前 , 16F
感謝回覆,我是用jserv課程的gnu工具,沒用過keil.....然
05/23 01:08, 16F

05/23 01:08, 6年前 , 17F
後我想我還是缺少了某些概念,讓我的思考一直鬼打牆,我
05/23 01:08, 17F

05/23 01:08, 6年前 , 18F
還是再去研究看看目標文件的結構好了....如果有什麼推薦
05/23 01:08, 18F

05/23 01:08, 6年前 , 19F
的資料或關鍵字的話,還請大大不吝提供,謝謝^_^
05/23 01:08, 19F

05/23 16:12, 6年前 , 20F

05/23 16:12, 6年前 , 21F
這本可以找來看看
05/23 16:12, 21F

05/23 16:13, 6年前 , 22F
相較於keil,gnu很多要自己來,理論上觀念應該要比用
05/23 16:13, 22F

05/23 16:13, 6年前 , 23F
keil的人清楚...
05/23 16:13, 23F

05/23 16:15, 6年前 , 24F
你可以去找一下系統程式的教科書,或者嘗試自己寫一個
05/23 16:15, 24F

05/23 16:15, 6年前 , 25F
elf loader,對了解這個問題應該有幫助
05/23 16:15, 25F
文章代碼(AID): #1R0bgfb4 (ASM)
文章代碼(AID): #1R0bgfb4 (ASM)