对链接地址0x30008000(S3C2440)的理解

发布者:清新自然最新更新时间:2020-06-27 来源: eefocus关键字:链接地址  S3C2440  内存 手机看文章 扫描二维码
随时随地手机看文章

当我们写链接器脚本的时候,我们会设置代码段的起始链接地址为0x30008000(S3C2440)。如果对链接地址理解错误的话,可能会出现像我这样的问题。


Q:gboot的链接器脚本里写的其实链接地址是内存中的0x30008000,再用交叉工具反汇编得到的start.S前几行代码地址都变成了0x30008000+,不太对啊。ARM启动流程里面讲处理器将NAND中的代码复制了4K到垫脚石中,垫脚石的地址是0x0,也正是因为这样,我们设置的异常向量表才有意义,处理器才能准确的找到处理异常的标号。但是把链接地址改成了0x30008000还怎么找?


A:首先要理解链接地址。我认为,链接地址就是为程序假想了一个起点,之后的代码都是在这个假想的起点基础上展开的。我们只有根据这个链接地址,才能找到后续的一些指令并执行。但是这个链接地址不是实际的指令的地址,我们先对gboot.elf进行反汇编看看


30008000 <_start>:

30008000:    ea000014     b    30008058

30008004:    e59ff014     ldr    pc, [pc, #20]    ; 30008020 <_undefined_instruction>

30008008:    e59ff014     ldr    pc, [pc, #20]    ; 30008024 <_software_intrrupt>

3000800c:    e59ff014     ldr    pc, [pc, #20]    ; 30008028 <_prefetch_abort>

30008010:    e59ff014     ldr    pc, [pc, #20]    ; 3000802c <_data_abort>

30008014:    e59ff014     ldr    pc, [pc, #20]    ; 30008030 <_not_used>

30008018:    e59ff014     ldr    pc, [pc, #20]    ; 30008034 <_irq>

3000801c:    e59ff014     ldr    pc, [pc, #20]    ; 30008038 <_fiq>


用b reset举例,虽然reset标号的地址已经到了0x30008000,但是我们的代码此时实际上是在垫脚石中运行的,也就是说PC指针还是指在0x0的位置。这样0x0和0x30008000就形成了一个映射的关系,即0x4相当于0x30008004,0x8相当于0x30008008......,都是因为我们将链接起始地址设成了0x30008000,这也就是我们所说的相对跳转。


Q:为什么链接起始地址要写成0x30008000?


A:照理说这个地址是随意的,只要在S3C2440的寻址空间内都可以。但是后期我们要执行C语言程序,而对堆栈等的初始化都是对SDRAM进行的,即在0x30000000之后的64M空间中。所以为了C语言能够成功运行,直接将代码的链接地址设到内存中,这样方面之后的绝对跳转,即


ldr pc, =main

一定要注意寄存器可用的位数,若少于32位的,必须用移位来赋值,或者定义时就确定位数

关键字:链接地址  S3C2440  内存 引用地址:对链接地址0x30008000(S3C2440)的理解

上一篇:S3C2440-裸机篇-01 | JZ2440开发板快速上手
下一篇:2440裸机开发 nand flash 详解

推荐阅读最新更新时间:2024-11-07 16:00

台积电重返内存市场 瞄准MRAM和RRAM
  晶圆代工大厂 台积电 和三星的竞争,现由逻辑芯片扩及内存市场。 台积电 这次重返内存市场,瞄准是诉求更高速及低耗电的 MRAM 和RRAM等次世代内存,因传输速度比一般闪存快上万倍,是否引爆内存产业的新潮流,值得密切关注。下面就随网络通信小编一起来了解一相关内容吧。    台积电 技术长孙元成日前在台积电技术论坛,首次揭露台积电研发多年的e MRAM (嵌入式磁阻式随机存取内存)和eRRAM(嵌入式电阻式内存)分别订明后年进行风险性试产,主要采用22奈米制程,这将是台积电因应物联网、行动装置、高速运算计算机和智能汽车等四领域所提供效能更快速和耗电更低的新内存。   这也是台积电共同执行长魏哲家向法人表达不会跨足标准型内存,不
[网络通信]
LINUX中s3c2440总线频率、时钟的设置
很多硬件的正常运行需要有总线时钟的支持,比如LCD、I2C等设备。本文分析一下s3c2440的总线时钟,以及在linux中对s3c2440总线时钟频率的相关操作。首先分析硬件s3c2440的总线时钟。 1. s3c2440的FCLK HCLK PCLK: 时钟源首先来自外部晶振12MHz。对于必须运行在200MHz以上的ARM920t内核来说,这个频率实在太低了,不能直接使用,所以首先要通过s3c2440片上的pll硬件电路将12MHz的晶振时钟信号升频,而具体升到多少MHz是通过MPLL控制寄存器来控制的。比如MPLLCON赋值为 0x5c 12 | 2 4 | 1就可以将PLL电路的输出时钟设置为400MHz,也就是将
[单片机]
国产内存真的来了:紫光可提供DDR3、DDR4内存芯片
  还记得前段时间闹得沸沸扬扬的国产 DDR4 芯片的传闻吗?当时有消息称 紫光 旗下的半导体公司量产了国内首个 DDR4 内存,只是这事疑点重重,最后 紫光 官方也辟谣称目前并没有 DDR4 内存量产,相关产品正在研发中。下面就随网络通信小编一起来了解一下相关内容吧。   国产内存真的来了:紫光可提供DDR3、DDR4内存芯片   现在国产DDR4内存又来了,涉及的还是 紫光 旗下的西安国芯半导体,其官网页面明确提到了可以长期供应DDR3、DDR4在内的DRAM芯片和裸晶圆。   这次涉及国产DDR4的还是紫光集团的子公司紫光国芯,旗下拥有西安紫光国芯、深圳国微、紫光同创等公司。根据官网介绍,“紫光国芯是紫光集团旗下半导体
[网络通信]
华为上线手机内存升级服务 四大系列均可享
华为商城宣布上线手机内存升级服务,价格389元起。 华为所指的的“内存”,并不是运行APP的内存,而是我们常说的机身存储。即通过更换更大内存的存储芯片,解决手机存储空间不足的问题。 从活动页面来看,参与内测升级的机型涉及Mate系列、P系列、nova系列、畅享系列。 升级128GB存储,若主板无故障,价格为459元,优惠价389元,若主板有故障,价格为709元,优惠价589元; 升级256GB存储,若主板无故障,价格为659元,优惠价559元,若主板有故障,价格为909元,优惠价759元; 常见问题: 1、设备没有问题,主板完好,只是想要扩展内存能否参与? 可以参与,但前提是需要符合内存升级服务的参与条件。 2、是否支持升
[手机便携]
华为上线手机<font color='red'>内存</font>升级服务 四大系列均可享
基于WINCE S3C2440 的LED驱动程序的编写
在SMDK2440的BSP包里经常看见这两句语句: volatile IOPreg *s2440IOP = (IOPreg *)IOP_BASE; volatile INTreg *s2440INT = (INTreg *)INT_BASE; 这两条语句简单的理解就是把s2440IOP和IOP_BASE等价,把s2440INT和INT_BASE等价。 IOP_BASE和INT_BASE在s244.h头文件中 #define IOP_BASE 0xB1600000 // 0x56000000 typedef struct { unsigned int rGPACON; // 00 unsigned
[单片机]
内存条掀起的涨价潮:国产手机涨价 三星成最大赢家
   “2017年DRAM价格涨幅将达到39%”,ICInsights在2017年第三季度做出预计。当下,以DRAM为代表的半导体存储器在全球范围内掀起涨价潮。   DRAM作为半导体存储器的产品类型之一,常见产品形态是内存条,主要的两个应用市场是PC和智能手机。据京东商城官网显示,金士顿DDR424008G台式机内存在半年内价格从400元左右涨至800元左右,同时金立集团董事长刘立荣在9月25日媒体交流会上称,国产手机下半年仍会涨价,部分原因是内存成本上升。   集邦咨询半导体研究中心(DRAMeXchange)的市场调查数据显示,2016年第4季DRAM严重供不应求,带动2017年第一季的合约价上涨超过30%,各类产品价格均上
[手机便携]
S3C2440看门狗定时器
看门狗定时器的主要作用是在程序因为干扰而跑飞后,能够使系统复位,不至于使系统永远的死下去。它的原理与一般的定时器没有多大区别,就是先要设置好一段时间,当超过这段时间后,就从当前运行的程序中跳出进入中断处理程序中。但两者的主要差别是,一般的定时器中断是我们希望它发生的,因此我们不会在定时器中断发生前的那个时间段内干预它;而看门狗定时器中断是我们不希望它发生的,因此我们要想方设法地避免其发生。主要的方法就是在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器重新开始计时。 view plain copy #include 2440addr.h #include Option.h #d
[单片机]
<font color='red'>S3C2440</font>看门狗定时器
TI C2000™ 外设资源管理器套件与免费教学 ROM
日前,德州仪器 (TI) 宣布推出增强型浮点 F28335 Delfino™ 微处理器 (MCU) 外设资源管理器套件与免费 C2000 MCU 教学 ROM,可为学生及实时控制新开发人员实现设计工作的跨越式起步提供简单易用的低成本基础工具。最新 C2000 教学 ROM 是一款 C2000 MCU 综合指南,也介绍了实时控制设计的注意事项。该教学 ROM 包含基于 TI F28335 外设资源管理器套件的实验模块,可提供出色的实践操作学习体验。该全新 F28335 外设资源管理器套件与前代资源管理器套件相比提高了集成度,可降低开发成本,加强学习练习。教学 ROM 与外设资源管理器套件相结合,将帮助更多工程师充分利用 C20
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved