历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2020年04月22日 | jz2440学习笔记———代码重定位相关

2020-04-22 来源:eefocus

实验引导:

在main函数中引入全局变量a时,若将连接后的文件烧写在nand flash上,则可以访问修改全局变量a,若将连接后的文件烧写在nor flash上,则只可访问a,不能修改a。这是由于烧写在nand flash 上的代码会被加载到4K的片内内存SRAM上,全局变量a放在内存里是可读可写的;但将代码烧写在nor flash上时,cpu可以直接通过内存控制器来访问nor flash,然而全局变量在nor flash中是不可修改的,因此需要重定位代码,即将全局变量a,或者是整段代码重定位到SDRAM中,这样就能读写全局变量了。


概念梳理:

加载地址:指二进制.bin文件烧写时的地址,默认从零地址开始

运行时地址:指程序在真正运行时的地址

绝对跳转:在代码进行跳转时采用的是绝对地址,访问全局变量时采用绝对跳转

相对跳转:在代码进行跳转时采用的是相对地址,即汇编中的B/BL命令跳转

重定位步骤:1.指定代码的运行地址 2 将代码从加载地址复制到运行时地址。若采用将全部代码重定位,则在跳转到main时,需要使用绝对跳转(ldr pc,=main)才能使程序运行在SDRAM中,否则代码还是运行在加载地址。


注意点:在复制代码时,如果是以byte为单位复制并且以byte为单位读数据,则无需考虑字节对齐;但若是以4*byte为单位,则需注意字节对齐,否则有可能导致数据被破坏。


段分类说明:

.text :代码段

.data:数据段,存放已经初始化了的全局变量

.rodata:只读数据段,存放静态常量(const修饰)

.bss:存放未初始化或者初始化为0的全局变量

.初始化.bss段:

.bss段并不会被程序自动初始化,因此不会在内存中有.bss段,需要人为地添加.bss段,并且对其初始化为0。


链接脚本:

重定位运行时地址和加载地址的指定,是通过链接脚本实现的。以下代码为例子:


SECTIONS

{

. = 0x30000000;


. = ALIGN(4);

.text      :

{

  *(.text)

}


. = ALIGN(4);

.rodata : { *(.rodata) }


. = ALIGN(4);

.data : { *(.data) }


. = ALIGN(4);

__bss_start = .;

.bss : { *(.bss) *(.COMMON) }

_end = .;

}


知识点补充

:链接脚本在被编译时会产生符号表,里面存储了定义的各个标签极其位置的信息,在使用c语言进行编程时,将标签用extern声明为外部引用,然后进行取地址就能得到该地址了。


说明:本笔记只用于笔者个人总结知识点,指导意义有限,若有同样学习了韦老师视屏的同学,欢迎相互交流。

推荐阅读

史海拾趣

CST Master Electronic Co Ltd公司的发展小趣事

随着市场的不断发展,CST Master意识到只有不断创新才能在激烈的竞争中立足。公司投入大量资源用于研发,积极探索新技术、新工艺和新材料。经过多次试验和失败,团队终于取得了一项重要的技术突破,推出了一款具有行业领先水平的新产品,赢得了客户的广泛认可。

Chicago Miniature公司的发展小趣事

随着LED技术的兴起,CML敏锐地捕捉到了这一趋势,并成为第一家引进LED灯具的公司。这一决策为公司带来了巨大的发展机遇。CML不断投入研发资源,推出了一系列具有创新性的LED产品,不仅提高了照明效率,还降低了能耗。这使得CML在微型照明领域逐渐取得了领先地位,并赢得了广泛的客户基础。

CONEXANT公司的发展小趣事

在语音通信领域,Conexant以其卓越的声卡技术赢得了市场的广泛认可。特别是在网络语音电话方面,Conexant声卡凭借其出色的性能和稳定性,成为了众多商务本和工作站的首选。惠普、联想等知名品牌的产品线中,都能看到Conexant声卡的身影。这一成功不仅源于Conexant对技术的持续投入和创新,也得益于其对市场需求的敏锐洞察和精准把握。

Abilis Systems公司的发展小趣事

在语音通信领域,Conexant以其卓越的声卡技术赢得了市场的广泛认可。特别是在网络语音电话方面,Conexant声卡凭借其出色的性能和稳定性,成为了众多商务本和工作站的首选。惠普、联想等知名品牌的产品线中,都能看到Conexant声卡的身影。这一成功不仅源于Conexant对技术的持续投入和创新,也得益于其对市场需求的敏锐洞察和精准把握。

EKIT公司的发展小趣事

2023年10月,华为坤灵(HUAWEI eKit)在香港成功举办了分销新品发布会。针对香港市场的特点,HUAWEI eKit展示了面向SOHO办公、酒店餐饮、商业地产、零售商超等场景的新品,并通过整合政策、产品、解决方案、服务和数字工具平台等措施,助力香港区域分销伙伴不断开拓中小企业市场。通过与联强国际(香港)有限公司(SYNNEX)的紧密合作,HUAWEI eKit成功吸引了超过100名香港分销商参与此次发布会,进一步巩固了其在香港市场的地位。

EZchip Technologies Ltd公司的发展小趣事

在电子行业中,人才和研发实力是企业成功的关键。EZchip深知这一点,因此一直重视人才团队的建设和研发实力的提升。公司拥有一支由业内顶尖专家和学者组成的研发团队,他们具备丰富的行业经验和深厚的技术功底。同时,EZchip还注重人才培养和引进,通过提供良好的工作环境和福利待遇吸引了一批批优秀人才加入。正是这些优秀的人才和强大的研发实力,为EZchip的持续发展提供了有力保障。

问答坊 | AI 解惑

求dsp builder的资料,谢谢了

最近在使用quartus中的dsp builder和matlab相结合进行仿真,但是在使用过程中出现可多问题,想找些资料看看…

查看全部问答>

多路复用问题?

如何实现将多路信号转换成单路信号输出…

查看全部问答>

求助!基于mega16的相位差计的程序问题~~~~~~~~~~~~~~~~~

mega16外围连接如下:相位差脉冲信号从PD6口输入,相位差关系判断信号从PD7口输入(前面整形电路已将两路同频输入信号处理成相位差脉冲信号和判断信号);如果判断信号是高电平,则显示“超前”,否则为“滞后”。 AVR与LCD1602连接信息 PA1 ->RS ...…

查看全部问答>

DIY导航避障车规整贴(二)

2011年5月28日本周DIY导航避障车规整贴:首先各位所需要的原件已经全部采购完毕,GPS使用Gotop GT-1513-SF并且 xu__changhua,用雕刻机刻出…

查看全部问答>

初学MSP-EXP430G2-LaunchPad(三)

二、Code Composer Studio 简介 这一部分介绍Code Composer Studio的入门知识。在实验练习中,我们将演示如何创建一个工程,以及如何将程序装载到MSP430器件中。另外,作为扩展练习,我们还将学习如何将晶振焊接到LaunchPad板子上的细节。 ...…

查看全部问答>

关于高频阻抗匹配的疑问

低频是高频的一种特殊情况,也是有反射功率的,反射功率被内阻消耗; 高频有反射功率,为了降低反射功率,进行阻抗匹配,这个阻抗匹配的模块就变成负载的一部分,让负载阻抗等于内阻(或输出阻抗)。一般高频功率源的内阻为50欧姆,那么阻抗匹配的 ...…

查看全部问答>

IAR调试问题

我在使用IAR5.4的,直接新建一个main函数后,点击“debug without download” 按钮后,就跳出如图的错误,请各路大侠帮忙!谢谢…

查看全部问答>

FPGA核的配置问题

在FPGA的IP核中,当配置时会有相应的资源分配,例如DSP、LUTs、FFs等,,请问这些都是什么意思,使用的时候有什么需要注意的地方嘛??谢谢。。…

查看全部问答>