免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1949 | 回复: 0
打印 上一主题 下一主题

[BootLoader] 请教定义已初始化全局变量导致程序大小改变的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-06 15:12 |只看该作者 |倒序浏览
在ok6410环境下面的一个裸机程序,
现在遇到这样的问题:
在main.c里面定义一个已经初始化的全局变量,编译后程序有30多KB,去掉这个变量后只有10几个字节

------------------------------------------------------
makefile 如下:

objs := start.o  main.o
uart.bin: $(objs)
        arm-linux-ld -Ttext 0x50000000 -o uart.elf $^
        arm-linux-objcopy -O binary -S uart.elf $@
%.o:%.c
        arm-linux-gcc  -Wall -O2 -c -o -c -o $@ $<
%.o:%.S
        arm-linux-gcc -Wall -O2 -c -o -c -o $@ $<
------------------------------------------------------
start.S 如下:

.globl _start
_start:
reset:
    ldr r0, =0x70000000
    orr r0, r0, #0x13
    mcr p15,0,r0,c15,c2,4      
    ldr sp, =8*1024
------------------------------------------------------
main.c 如下:

int i=3; //main.c 就一行代码
------------------------------------------------------

现在有2个问题不明白:
1.为什么一个全局变量导致编译后大小差这么多? 我知道已初始化的变量是放在数据段的,看bin文件,代码段和数据段中间是一堆0,为什么代码段和数据段不是挨着的呢?
2.我把makefile改了一下,改成:

objs := start.o  main.o
uart.bin: $(objs)
#        arm-linux-ld -Ttext 0x50000000 -o uart.elf $^   #去掉原来的这行
      ${LD} -Tuart.lds -o uart.elf $^   #改成用lds文件
        arm-linux-objcopy -O binary -S uart.elf $@
%.o:%.c
        arm-linux-gcc  -Wall -O2 -c -o -c -o $@ $<
%.o:%.S
        arm-linux-gcc -Wall -O2 -c -o -c -o $@ $<
------------------------------------------------------
uart.lds 如下:
SECTIONS {
    . = 0x50000000;

        .text : {
                start.o                       
                main.o
                * (.text)
        }

        . = ALIGN(4);
        .rodata : {
                        * (.rodata)
        }

        . = ALIGN(4);
        .data : {
                        * (.data)
        }

        . = ALIGN(4);
    bss_start = .;
    .bss  : { *(.bss)  *(COMMON) }
    bss_end = .;
}

编译后生成的程序大小是40个字节,感觉还算靠谱,看bin文件,代码段和数据段没有那一堆0了, 代码段和数据段是挨着的,那为什么这回代码段和数据段又是挨着的了呢?

谢谢!!!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP