历史上的今天
返回首页

历史上的今天

今天是:2025年08月10日(星期日)

正在发生

2021年08月10日 | 1.4.3重定位_使用C语言清除BSS段

2021-08-10 来源:eefocus

使用C语言清除BSS段,我们肯定要获取BSS段的起始地址和结束地址,那么,C语言要怎么实现使用lds文件中的变量abc?


答:需要以下两步,这两步是重点。


在函数中声明该变量为extern类型(类型不重要,因为我们主要是取值,具体原因后面会说);

使用时,要取址,比如, int *p = &abc;//p的值即为lds中abc的值。

比如下图中,使用extern声明代码段的起始地址和bss段的起始地址,然后取值用指针进行复制操作,这样lds中的变量也可以像C语言中的普通变量一样操作。(实际上,它们和C语言中的变量不同。)

在这里插入图片描述

在C语言中需要声明,那么在汇编指令中,为什么可以直接使用?(如下图,为重定位和清除bss段的汇编代码)

在这里插入图片描述

下面开始解答:

在C函数中,如果我们声明如下变量。这样,该变量为全局变量:


int g_i; //程序中必然有四字节空间来保存这个变量

1

但是,如果我们在lds链接文件中声明了a1,a2,a3…an个变量,那么,.bin文件中是不会保存这些变量的,这是为啥?


答:这是因为C程序中不保存lds文件中的变量(因为一般用不到),而且真正要用到的时候,我们也并不是没办法。


我们编译程序时,有一个symbol table符号表,万一要用这些变量,可以通过这个符号表在链接的时候使用。


以上面为例,除了g_i,我们再声明两个变量:


int g_i, g_j, g_k;


那么在链接的时候,会有一个符号表如下:

在这里插入图片描述

画质不好,但是还是能看懂的。这里每个圈表示一个变量,一个变量由名字和地址构成。显然,C语言中的变量,名字即为变量名,地址即为变量的地址。但是,我们前面说过,.bin文件中不会保存lds文件中的变量,所以lds文件中的变量,地址填的是值,名字则还是变量名。 所以,我们在copy2sdram函数中才要使用取址符号来修饰这个lds变量,因为它的地址才是它的值。


另外,我们要明白。


这个符号表只存在于链接时,作用是辅助链接,不存在与.bin文件中。

lds文件中,无论变量还是常量,里面的值都来自于链接脚本,在链接时由编译器决定。

在使用上,他们和C语言中的普通变量是不同的:


对于g_i,它是一个C语言变量,使用&g_i就可以得到它的地址Addr;

对于lds中的a1,他们没有地址,因为.bin文件里面不会保存它们,C语言中使用它们时,使用&a1取它们的值。


综上所述,使用ld中的变量,就是借助symbol table保存lds的变量,使用时加上&得到它们的值。

推荐阅读

史海拾趣

Ampex Data Systems Group公司的发展小趣事

Ampex Data Systems Group 是一家在电子行业中知名的公司,专注于提供数据存储和处理解决方案。以下是关于Ampex Data Systems Group 公司发展的五个相关故事:

  1. 创立与早期发展:Ampex Data Systems Group 公司成立于20世纪50年代,总部位于美国加利福尼亚州的雷迪伍德城。公司最初致力于开发和制造磁带录音机和磁带存储设备,为音频和视频录制领域提供解决方案。在成立初期,Ampex Data Systems Group 通过技术创新和产品质量赢得了客户的信任和市场认可。

  2. 技术创新与产品多样化:随着数据存储和处理技术的发展,Ampex Data Systems Group 不断进行技术创新,扩展产品线。公司推出了一系列新型数据存储和处理设备,包括磁带驱动器、磁盘阵列、数据记录器等。这些产品具有高性能、高可靠性和大容量的特点,适用于航空航天、国防、能源和科学研究等领域。

  3. 政府合同与军事应用:Ampex Data Systems Group 与政府机构和军事部门建立了紧密的合作关系,为其提供定制化的数据存储和处理解决方案。公司参与了许多重要的国防项目,如雷达系统、导航系统、侦察系统等。Ampex Data Systems Group 的产品被广泛应用于军事通信、情报收集和战术分析等领域,为国家安全和国防事业做出了贡献。

  4. 国际市场拓展与合作伙伴关系:除了在美国市场的成功,Ampex Data Systems Group 还积极拓展国际市场,并与全球各种行业领先企业建立了合作伙伴关系。公司在欧洲、亚洲和其他地区设立了销售办事处和合作伙伴网络,扩大了产品的市场份额和影响力。Ampex Data Systems Group 通过与国际合作伙伴的合作,共同推动了技术创新和产品发展。

  5. 持续发展与市场竞争力:Ampex Data Systems Group 持续致力于技术创新和产品研发,以保持在电子行业的竞争力。公司不断投入资金和人力资源,加强研发能力,提升产品性能和品质。同时,Ampex Data Systems Group 还注重市场营销和客户服务,与客户保持密切沟通,满足其需求,并持续改进产品和服务,以适应市场变化和客户需求。

这些故事展示了Ampex Data Systems Group 从成立初期到如今在技术创新、产品多样化、政府合同与军事应用、国际市场拓展与合作伙伴关系以及持续发展与市场竞争力等方面取得的重要进展。

Gruner AG公司的发展小趣事
明确电路需要实现的功能,如信号传输、电气隔离、放大等。
方舟(ARKLED)公司的发展小趣事

在市场竞争日益激烈的今天,方舟公司凭借其卓越的产品质量和完善的售后服务,成功打开了国内外市场。公司积极参与国内外行业展会和交流活动,与众多知名企业建立了战略合作关系。同时,方舟公司还不断拓展海外市场,产品远销欧美、东南亚等地区,赢得了客户的广泛赞誉。

Amaze Electronics Pte Ltd公司的发展小趣事

在激烈的市场竞争中,品牌建设成为Amaze Electronics提升市场影响力的关键。公司注重品牌形象的塑造,通过举办各类活动、参与行业展会等方式,提高品牌知名度和美誉度。同时,公司还注重产品质量的把控,确保每一件产品都能体现公司的专业水准和品质追求。这些举措有效提升了Amaze Electronics在市场上的影响力,吸引了更多客户的关注和信赖。

ABL Heatsink公司的发展小趣事

早期,ABL Heatsink公司主要生产通用型散热器,但随着市场竞争的加剧,公司意识到必须调整市场定位。于是,公司开始专注于研发针对特定电子设备的高性能散热器。通过深入了解客户需求,ABL Heatsink成功开发出一系列定制化产品,赢得了市场的青睐。

Cliff Electronic Components公司的发展小趣事

ABL Heatsink公司在电子散热领域一直默默耕耘,直到某天,公司的研发团队成功开发了一种新型的高效散热材料。这种材料不仅导热性能卓越,而且成本相对较低,立即引起了业界的关注。随着这种新型散热材料的广泛应用,ABL Heatsink公司的订单量激增,公司规模迅速扩大。

问答坊 | AI 解惑

油电混合动力汽车工作原理图解

hunhedongli.JPG qidongshi.JPG dizhongsuxingshi.JPG yiban.JPG dianliang.JPG quansu.JPG jiansu.JPG …

查看全部问答>

“关注逃离工科现象”之一 经管专业成吞噬未来工程师的黑洞

  本报记者 雷宇 通讯员 高笑寒   编者按   中国目前正处于工业化、城市化、现代化的浪潮中,规模宏大的工程项目和科研亟须大量高水平的工程科技人员。然而,目前的实际状况却是—大量拔尖学生特别是高考状元不再“投身”艰苦的水利水电、 ...…

查看全部问答>

送分100分:冬天电脑开机后,风扇要先响一会,风扇噪声的成因是什么。[

冬天电脑开机后,风扇要先响一会,风扇噪声的成因是什么。 不要告诉我润滑油的原因,我想知道噪声的底层的成因,比如是来自扇片,还是来自转轴,具体又是什么过程产生了噪声。…

查看全部问答>

在哪里能买到很好的网络(PHY)芯片?

在哪里能买到很好的网络(PHY)芯片? 另外, ARM7环境下,哪位大侠有各种网络芯片(PHY)的网速测试结果? 请问什么样的网络芯片(要求是单口的PHY芯片)速度最好?稳定性最高? …

查看全部问答>

无stdout情况下,printf输出到了哪里

如题。 眼下在做一个SD卡录像的项目,在JTAG模式下一切正常,standalone模式时发现printf的信息输出到了录像文件里,百思不得其解。…

查看全部问答>

使用X-LITE实现和嵌入式终端语音聊天

各位英雄:      有没有用过X-LITE3.0的?小弟有几个问题,请各位英雄帮忙:      1、局域网内使用X-LITE能否实现两台PC间的点对对直接通信?也就是不需要连接到什么服务器之类的?如何设置账户信息呢? ...…

查看全部问答>

将S2E例程修改成静态IP不成功!纠结!求坛友帮助!!

        这几天一直在调试S2E这个例程!因为手头没有带DHCP功能的服务器!所以需要将例程修改成静态IP才能运行!!         在bjmonsoon老师的帮助下 知道要修改config,c ...…

查看全部问答>

LPC17XX USB

大家有没有USB的LPC17XX的详细点说明呀。…

查看全部问答>

IIC双机互相通信问题

在使用IIC通信时,如何实现当主机向从机发送完数据以后,主机接收从从机发送的数据(不是应答信号)?需要将所有的设置都重新设置吗?…

查看全部问答>

PCB大电流走线加solder层?

PCB上需要走20A左右的大电流,除了增加线宽,听说还可以在solder层还是paste层上做文章,具体怎么搞得呀,麻烦大家了~…

查看全部问答>