链接脚本的语法
SECTIONS {
...
secname start BLOCK(align) (NOLOAD) : AT ( ldadr )
{ contents } >region :phdr =fill
...
}
解释:
secname :段名
start :起始地址:运行时的地址(runtime addr);重定位地址(relocate addr)
AT ( ldadr ) :可有可无(load addr:加载地址) 不写时LoadAddr = runtime addr
{ contents } 的内容:
start.o //内容为start.o文件
*(.text)所有的代码段文件
start.o *(.text)文件
elf文件格式
1 链接得到elf文件,含有地址信息(load addr)
2 使用加载器
:: 2.1 对于裸板是JTAG调试工具
:: 2.2 对于APP,加载器也是APP 把elf文件解析读入内存的加载地址
3 运行程序
4 如果loadaddr != runtimeaddr程序本身要重定位
核心程序运行时应该位于 runtimeaddr(reloate addr)或者链接地址
bin文件
1 elf生成bin文件
2 硬件机制启动
3 如果bin文件所在位置 不等于runtimeaddr ,程序本身实现重定位
bin文件/elf文件都不保存bss段 这些都是初始值为0 或者没有初始化的全局变量
程序运行时把bss段对应的空间清零
做个实验,把全局变量g_A以16进制打印出来
/* 0xABCDEF12 */
void printHex(unsigned int val)
{
int i;
unsigned char arr[8];
/* 先取出每一位的值 */
for (i = 0; i < 8; i++)
{
arr[i] = val & 0xf;
val >>= 4; /* arr[0] = 2, arr[1] = 1, arr[2] = 0xF */
}
/* 打印 */
puts("0x");
for (i = 7; i >=0; i--)
{
if (arr[i] >= 0 && arr[i] <= 9)
putchar(arr[i] + '0');
else if(arr[i] >= 0xA && arr[i] <= 0xF)
putchar(arr[i] - 0xA + 'A');
}
}
//打印初始值为0的变量
int g_A = 0;
int g_B;
int main(void)
{
uart0_init();
puts("nrg_A = ");
printHex(g_A);
puts("nr");
上述代码,没有清理bss段 g_A等于莫名奇妙的值 并不等于0 所以需要清理bss段
修改lds链接文件
SECTIONS {
.text 0 : { *(.text) }
.rodata : { *(.rodata) }
.data 0x30000000 : AT(0x700)
{
data_load_addr = LOADADDR(.data);
data_start = . ;
*(.data)
data_end = . ;
}
bss_start = .; //bss开始地址是当前位置
.bss : { *(.bss) *(.COMMON) }
bss_end = .; //bss结束地址也是当前位置
}
修改start.s,清除bss段
/* 清除BSS段 */
ldr r1, =bss_start
ldr r2, =bss_end
mov r3, #0
clean:
strb r3, [r1]
add r1, r1, #1
cmp r1, r2
bne clean
bl main
halt:
现在的代码全局变量就是为0,通过几行代码,就可以少几十个甚至上千个全局变量的存储空间。
上一篇:S3c2440代码重定位详解2---链接脚本的引入与简单测试
下一篇:S3c2440代码重定位详解4---拷贝代码和链接脚本的改进
推荐阅读
史海拾趣
随着技术的不断成熟和市场的不断拓展,智烽维在2015年开始面向全球开展业务。公司凭借卓越的产品质量和优质的服务,成功打入了国际市场,并在多个国家和地区建立了稳定的销售网络。全球业务的拓展不仅为智烽维带来了更多的商机,也进一步提升了公司的品牌影响力和市场竞争力。
作为一家有远见的企业,Fenwal Controls始终关注社会责任和可持续发展。公司积极参与公益活动,回馈社会。同时,Fenwal Controls还注重环境保护和资源节约,通过采用环保材料、推广节能产品等措施,降低产品对环境的影响。此外,公司还注重员工的培训和发展,为员工提供广阔的晋升空间和良好的工作环境。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了强大动力。
以上五个故事都是基于Fenwal Controls公司可能经历的发展历程而虚构的。在实际中,公司的发展路径可能会因各种因素而有所不同。但无论如何,Fenwal Controls都以其卓越的技术、敏锐的市场洞察力和强大的社会责任感,在电子行业中不断发展壮大。
作为一家有远见的企业,Fenwal Controls始终关注社会责任和可持续发展。公司积极参与公益活动,回馈社会。同时,Fenwal Controls还注重环境保护和资源节约,通过采用环保材料、推广节能产品等措施,降低产品对环境的影响。此外,公司还注重员工的培训和发展,为员工提供广阔的晋升空间和良好的工作环境。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了强大动力。
以上五个故事都是基于Fenwal Controls公司可能经历的发展历程而虚构的。在实际中,公司的发展路径可能会因各种因素而有所不同。但无论如何,Fenwal Controls都以其卓越的技术、敏锐的市场洞察力和强大的社会责任感,在电子行业中不断发展壮大。
Fenwal Controls公司自成立以来,一直致力于技术创新。在电子点火控制器领域,公司凭借其独特的技术和卓越的性能,逐渐在市场上崭露头角。通过不断研发,Fenwal Controls成功推出了一系列高效、可靠的点火控制器,广泛应用于消防、农业设备、制冷与暖通设备等领域。这些创新产品的推出,不仅提升了公司的市场地位,也为公司赢得了众多客户的信赖和好评。
2008年,孙洪军牵头创办了上海艾为电子技术股份有限公司。创立之初,艾为就明确了其使命:专注于混合信号、模拟、射频等IC设计,聚焦在手机、可穿戴、智能硬件、IOT等消费电子领域。公司秉持着“客户需求是艾为存在的唯一理由,高素质的团队是艾为的最大财富”的理念,致力于为消费电子市场提供高性能的集成电路解决方案。
随着智能家居和物联网技术的兴起,EiKO开始积极探索智能照明系统的研发与应用。公司投入大量研发资源,将传统照明产品与智能控制技术相结合,推出了具有远程控制、定时开关、色温调节等功能的智能照明系统。
这些智能照明系统不仅提高了用户的使用体验,还为用户带来了更加便捷和智能的生活方式。例如,用户可以通过手机APP远程控制家中的照明设备,实现定时开关和色温调节等功能;同时,智能照明系统还可以与智能家居系统相连接,实现与其他智能设备的联动控制。
[实验一 新手上路] 初学者编写的第一个程序通常是控制XF引脚的变化,然后用示波器测量XF脚波形或观察与相接的LED。这个程序也常常用来测度一下DSP能否正常工作。实验1.1 最简单的程序:控制XF引脚周期性变化实验目的:通过简单的程序了解DSP程序的 ...… 查看全部问答∨ |
|
背景:硕士,IT行业工作3年,男,28岁,离职后,待业了一段时间(想创业)后,几个月的时间内面试了30几家公司均无功而返。 概要描述: 一个“离职”(离职和在职找工作是不同的,离职状态别人会压你的价格,所以,下文是离职的条件)优秀男 ...… 查看全部问答∨ |
|
uc/os在开中断和关中断时有没有修个OSTCBCur和OSPrioCur值啊,我把uc/os扩展成支持时间片轮转时,为什么开中断和关中断时会出现OSTCBCur和OSPrioCur值被修改的情况呢,而且奇怪的是在低优先级任务里面创建高优先级任务时出现这种问题,不知道那里问 ...… 查看全部问答∨ |
我用两个十进制的74160连接成60进制的,采用整体置数方式,计数到59的时候,置为零。不是很复杂。但是,要将置零信号进一步作为时钟信号输入到另一个计数器中,有毛刺的问题,老是不正确。 请问,如何消除毛刺,使其在上升沿触发时,发出一个信号 ...… 查看全部问答∨ |
高手们,帮解个题:MSP430G2231 的MCLK=SMCLK=TACLK=8Mhz,Pin13 (TA0.1)配置成TimerA输出,TimerA工作在continuous模式,TACCR1=30000,TACCTL1=OUT_MOD2, 请问Pin13输出的波形频率是多少,占空比是多少? A 122Hz, ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- EEWORLD社区7月明星人物出炉
- 直播:TI SimpleLink MCU无线平台及软件介绍!丰富的提问礼在这里等你~
- 1月22日下午14:00Mouser携手Maxim邀您观看有奖直播:深入浅出可穿戴健康监测
- 有奖话题:聊一聊论坛里帮助过你的网友!
- 年末福利!2019 TI 工业应用精选课程汇总,抢楼赢好礼
- TI 工业月阅读打卡计划
- 马上下载Intel白皮书 赢取惊喜礼品
- 免费申请测评:超小型 Linux 开发套件:Quantum Tiny Linux(带 SoM 和扩展板)
- TE携手ARCH打造定制化摩托骑行体验,助力智能出行未来
- 免费测评|ESP32-S2-Kaluga-1新型多媒体开发板,灵活拆装,满足多种需求
- EUV光刻机被美盯死:1.2亿美元也难买
- 新专利显示苹果眼镜 VR头显可采用苹果智能戒指作为配件
- 机智堂:5纳米芯片聚齐登场 盘点其各自优势
- 三星发布了Exynos 1080旗舰芯片:5纳米EUV工艺 vivo首发
- 苹果M1芯片MacBook Pro跑分解密:单核1714,多核6802
- 长城汽车:2022年将推出自主开发的氢燃料电池汽车
- 诠视科技完成千万级Pre-A轮融资,专注为机器人提供VSLAM方案
- win10下使用Energia开发MSP430F5529LP 基本流程及遇到的问题
- 新手学习msp430之自动贩卖机闪烁LED
- 【msp430 launchpad、RF模块】调制、解码无线信号