历史上的今天
返回首页

历史上的今天

今天是:2025年04月18日(星期五)

正在发生

2020年04月18日 | 【s3c2440】第三课:代码重定位

2020-04-18 来源:eefocus

什么是重定位

简单来说就是把程序从内存的一个位置复制到另一个位置。


重定位的重要性

若s3c2440使用Nand Flash启动,则CPU会将Nand Flash的前4k拷贝到s3c2440 soc内部的SRAM。如果程序没有重定位代码,则只能运行Nand flash前4k的程序。


若s3c2440使用Nor Flash启动,则CPU无法修改Nor Flash内存中的数据。如果程序没有重定位代码,则会因为无法修改全局变量、静态变量的值导致程序运行出错。


链接脚本

链接脚本的格式如下:


SECTIONS

{

sectname start BLICK(align) (NOLOAD) : AT( ldadr )

{ contents } >region :phdr =fill

...

}

主要会用到的格式如下:


SECTIONS

{

.sectname : AT( ldadr )

{ contents } 

...

}

image.png?imageView2/2/w/550

具体的代码如下:


SECTIONS

{

. = 0x30000000; #表示relocate addr从0x3000000(sdram的基地址)开始


__code_start = .; #声明一个变量用于重定位,其值等于0x30000000(该变量的地址就是他的值)


. = ALIGN(4); #4字节对齐

.text      : #一个标号

{

  *(.text) #表示.text里的内容是所有的text段

}


. = ALIGN(4);

.rodata : { *(.rodata) } #只读数据段


. = ALIGN(4);  

.data : { *(.data) } #初值不为0的全局变量段


. = ALIGN(4);

__bss_start = .; #声明一个变量用于之后清除bss和comment段,也用于重定位

.bss : { *(.bss) *(.COMMON) } #bss段和comment段

_end = .; #用于清除bss和comment段的变量

}


重定位函数:


void relocate_to_sdram(void)

{

/* 要从lds文件中获得 __code_start, __bss_start

* 然后从0地址把数据复制到__code_start

*/


extern int __code_start, __bss_start; //在lds文件里的变量需要extern声明


volatile unsigned int *dest = (volatile unsigned int *)&__code_start;//变量的地址就是变量的值

volatile unsigned int *end = (volatile unsigned int *)&__bss_start;

volatile unsigned int *src = (volatile unsigned int *)0;


while (dest < end)

{

*dest++ = *src++;//循环复制代码

}

}



void clean_bss(void)

{

/* 要从lds文件中获得 __bss_start, _end

*/

extern int _end, __bss_start;


volatile unsigned int *start = (volatile unsigned int *)&__bss_start;

volatile unsigned int *end = (volatile unsigned int *)&_end;



while (start <= end)

{

*start++ = 0;//循环删除bss段和comment段

}

}

推荐阅读

史海拾趣

Corsair Memory Inc公司的发展小趣事

随着公司的发展,Corsair Memory Inc不仅局限于内存产品的生产,还积极扩大业务范围。其中,收购SCUF Gaming是Corsair在扩展业务版图上的重要一步。这一收购使Corsair得以进入游戏外设市场,进一步丰富了其产品线,也为其带来了更多的增长机会。

德旭电子(DEXU)公司的发展小趣事

随着公司规模的不断扩大和业务范围的不断拓展,德旭电子开始注重履行社会责任和推动可持续发展。公司积极参与公益事业和社会活动回馈社会。

在环保方面德旭电子坚持绿色生产和低碳发展理念积极推广环保技术和设备降低生产过程中的能耗和排放。同时公司还注重产品的环保性能研发和生产符合环保标准的产品满足客户的环保需求。

在社会责任方面德旭电子关注员工福利和职业发展为员工提供良好的工作环境和培训机会促进员工的成长和发展。此外公司还积极参与社会公益事业和慈善活动为社会做出积极贡献。

通过这些举措德旭电子在履行社会责任和推动可持续发展方面取得了显著成效赢得了社会的广泛认可和赞誉。

Altus Technology Inc公司的发展小趣事

随着公司规模的不断扩大,Altus开始实施全球化战略,积极拓展海外市场。公司通过与国际知名企业的合作,成功将产品打入国际市场,并建立了完善的销售网络和客户服务体系。同时,Altus还积极参与国际电子行业的交流和合作,不断吸收和引进国际先进技术和管理经验,提升了公司的整体竞争力。

First Silicon Co., Ltd公司的发展小趣事

人才是企业发展的核心竞争力。First Silicon公司深知这一点,因此始终将人才战略作为公司发展的重要支撑。公司建立了完善的人才培养体系和激励机制,吸引了大批优秀人才的加入。同时,公司还注重与高校和研究机构的合作,共同开展前沿技术研究和人才培养项目。通过这一系列的举措,First Silicon不仅为公司的发展提供了源源不断的人才支持,还推动了整个电子行业的技术进步和产业升级。

请注意,以上五个故事均是基于电子行业的一般情况和假设构建的,并非First Silicon Co., Ltd公司的实际历史。如需了解该公司的具体发展情况,建议直接访问其官方网站或查阅相关行业报告。

Hisetec Electronic Co Ltd公司的发展小趣事

背景:随着全球化进程的加速,电子产品的供应链越来越复杂,国际合作成为必然趋势。Hisetec Electronic Co Ltd公司敏锐地洞察到这一点,开始实施国际化战略。

发展:公司首先在欧洲设立研发中心,与当地高校和科研机构合作,共同开发新技术。随后,又在亚洲多个国家和地区建立生产基地和销售网络,实现了全球范围内的资源配置和市场覆盖。通过这一系列举措,Hisetec公司不仅降低了生产成本,还提升了品牌知名度,实现了业务的高速增长。

Custom Connector Corporation公司的发展小趣事

Custom Connector Corporation成立于1969年,当时电子连接器行业正处于快速发展阶段。创始人看到这一市场潜力,决定投身于这一领域。在创业初期,CCC面临着资金紧张、技术瓶颈和市场认可度低等问题。然而,创始人凭借对技术的执着追求和对市场的敏锐洞察,带领团队不断研发新产品,改进生产工艺,逐渐在市场中树立了自己的品牌形象。

问答坊 | AI 解惑

【2009年电子设计大赛题目分析三】——多图

电子竞赛中的30m的频率通讯电路图出来了 https://bbs.eeworld.com.cn/thread-85045-1-1.html 电子大赛之最大功率跟踪 https://bbs.eeworld.com.cn/thread-85046-1-1.html 大赛B题 自制声源 https://bbs.eeworld.com.cn/viewthread.php?tid=85080 ...…

查看全部问答>

教你如何学习嵌入式系统(基于ARM平台)(转)

一、嵌入式系统的概念          着重理解“嵌入”的概念    主要从三个方面上来理解。      1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构 ...…

查看全部问答>

WIFI安全性问题

wifi在连接路由器时,wifi会搜索出周围存在无线路由器,对于其中一台无线路由器,如果我们不输入密码,能不能连上。我在做wifi测试的时候,只指定用户名,而没有输入密码或者输入错误的密码能连接上了无线路由器,请问产生这个现象的原因是不是wifi ...…

查看全部问答>

中*美*爱*梯*科*技, 9月10日新班开课, 免费试听!

中*美*爱*梯*科*技, .NET外企软件工程师班将于2007年9月10日开课, 开课第一周免费试听, 欢迎大家踊跃报名参加!   中*美*爱*梯*科*技向学员郑重承诺: 百分之百保证就业, 月薪3000——8000, 就不了业者退还全部学费!    ...…

查看全部问答>

Code Composer Studio v4.2 for MSP430(tm) User’s Guide

[ 本帖最后由 wstt 于 2011-9-14 13:34 编辑 ]…

查看全部问答>

单片机通电之后继电器就一直响。

在淘宝上买的铁牛单片机,本来之前用还好好的,后来不知道烧了一个什么程序,导致每次通电之后继电器都会响一声,同时继电器下面那个绿灯也闪了一下,就一下。。。。烧录程序过程中,继电器就一直响,绿灯也一直闪烁。求高手们解答这是什么问题。? ...…

查看全部问答>

基于无线的定位算法研究资料大全

最近由于在研究无线定位算法,所以上传一些资料和大伙共享下,这都是我从各个渠道汇集而来的,希望对大家有用,也希望下载过的朋友留下个脚印。 [ 本帖最后由 wateras1 于 2012-5-3 22:01 编辑 ]…

查看全部问答>

MXCHIP+跑第一个Wifi例程的注意事项

第一个例程我昨天晚上就跑通了。今天看到网友说得好像很不容易,我把我的方法及遇到的问题说下。为以后扫清道路。 首先只要严格按照用户手册去做就应该没有问题。在这里再传下手册。同时自己也MARK一下。 我首先是下bootlaod: 手册上说很明确了 ...…

查看全部问答>

求教用msp430g2553 做一个音乐流水灯

想用PWM做一个蜂鸣器播放音乐加流水灯一起,做一个音乐流水灯,那个大神有成熟的程序吗,帮忙分享一下…

查看全部问答>