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