共1条
1/1 1 跳转至页
请再解释一个关于ADS中ro/rw base的疑惑(已查阅资料)!
首先说一下,我认为我还是看了不少的资料,然后再来问这个问题的,看起来下面我写的很多,其实我只是想把问题描述清楚一点,我认为我已经写的比较详细了,所以应该不会耽误各位大侠多少时间,所以希望能耐心看完,谢谢 !
我的CPU是4510,我在各种资料上都看过相关的解释:
-ro-base address(即设定Image$$RO$$Base--我的理解)
这个选项将包含有RO(Read-Only属性)输出段的加载地址和运行地址设置为address,
该地址必须是字对齐的,如果没有指定这个选项,则默认的RO基地址值为0x8000。
-rw-base address
这个选项设置包含RW(Read/Write属性)输出段的域的运行时地址,该地址必须是字对
齐的。
Image$$RO$$Base is the address of the read-only execution region (usually
contains code and read-only data).--ro运行时地址
Image$$RW$$Base is the address of the read-write execution region (usually
contains data).--rw运行时地址
所以大致意思,我是知道的,不过在还是在有几个问题想不明白:
问题1、就是这个设定的Image$$RO$$Base与我们复位时CPU读取第一条指令的 0x0 地址有什么关系?这个“Image$$RO$$Base”到底又设定了那些源代码的运行起始地址?比如在一个Bootloader中,往往包含同时包含汇编代码和C语言代码两部分,这个“Image$$RO$$Base”只设定了C语言中RO段的运行地址 ?(拷贝RO RW段代码到Image$$RO$$Base,Image$$RW$$Base标识的位置是我的bootloader 汇编代码进入C前做的最后一件事)
如果说也设定了汇编中ro部分代码的运行地址,那问题2又怎么解释 ?
问题2、有人说“请注意,将工程编译为烧入Flash的二进制代码时,需要将链接器重新设置,将调试时程序空间定位地址(RO Base地址)改为0x00000000”,但我明明刚刚编译的Bootloader就将ro base设为了0xf00000,现在我已将其烧写入Flash中测试过,Bootloader运行良好,而且在上电时Flash首先被映射到0地址开始的地方,这与设定的0xf00000差的很远,当然在程序将进入C语言前,会remap SDRAM到0~16M空间,并将RO RW段拷贝到Image$$RO$$Base,Image$$RW$$Base标识的位置,问题是这个拷贝之前我的所有代码(比如SDRAM初始化,remap,堆栈初始化等)都运行的很正常,这又怎么解释呢?
这样一来我到有个奇怪的想法就是,如果我的程序没有C语言代码,岂不是就可以不用管这个ro base的设置?因为从一开机到拷贝ro/rw段前,我所有的汇编代码执行良好。
问题3、我的vector.S中复位入口“ResetEntry”的部分代码如下,用AXD载入ADS编译的这个.bin文件的时候可以看到,这个“ResetEntry”标号开始的代码被编译到了.bin文件的最前面,因为我在链接设置里面把reset section放在了img的最前面。我有点不明白就是这个“ResetEntry”标号代表着的一个地址与Image$$RO$$Base又有什么关系 ?与复位时CPU读取第一条指令的 0x0 地址又有什么关系?因为我的Bootloader在拷贝ro段代码时用到了这个标号,同时我的Bootloader代码也并不是真正放在Flash的起始部分(即开机的0地址处),只是在0地址处放了一条跳转到Flash的高端,再执行哪里存放的Bootloader代码。
AREA reset, CODE, READONLY
ENTRY
;复位和上电启动的入口
ResetEntry
b SYS_RST_HANDLER
b UDF_INS_HANDLER
.........................................
4、我在AXD调试程序时还发现,调试过程中我可以把ADS生成的.bin文件载入SDRAM中任何位置,然后修改pc值执行之,不论你的Image$$RO$$Base,Image$$ROW$$Base设定在什么地方,当然我的这个调试的程序肯定没有对ro/rw段做任何的拷贝操作。这让我更对RW段运行时地址和Image$$ROW$$Base的关系感到疑惑,因为rw段中不是保存有程序需要的变量或数据么?Image$$ROW$$Base设定了rw段的运行地址,那岂不是也就设定了运行时变量或数据在内存中的存在位置?那我用AXD加载的这个程序又在哪里获得的程序运行需要的变量和数据呢 ?
上面的问题其实一直就困扰了我好久,不过因为项目方面比较急,所以也就一直放在哪里没有对其深究,现在稍微有点空,才放到网上来,请各位解惑,非常感谢 !
我的表达能力也不怎么好,上面的问题也许有点罗嗦,如果还有什么没有说清楚的也希望能提出来,3KS ag !
[align=right][color=#000066][此贴子已经被作者于2005-8-26 9:52:59编辑过][/color][/align]
关键词: 请再 解释 一个 关于 疑惑 查阅 资料 这个 我
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |