694|3

440

帖子

0

资源

一粒金砂(高级)

编译出的bin文件结尾多了很多0

本帖最后由 woody_chen 于 2020-8-10 10:32 编辑

众所周知,有些变量是不需要初始化的。

最近想优化下芯片启动的速度。所以想把某些很大的buffer从bss段,放到新建的一个no_init段。这样芯片启动的时候就不需要把这个buffer清0

第一步,在link文件中新建了一个no_init段。这里放在bss段后面。

        .bss :
        {
	        . = (((. + 3) / 4)*4);
	        PROVIDE(_start_bss_ = .);
            *(.sbss)
            *(.sbss.*)
            *(.bss)
            *(.bss.*)
        }
        PROVIDE(_end_bss_ = .);

        .no_init :
        {
            . = (((. + 3) / 4)*4);
            *(.no_init)
            *(.no_init.*)
        }

第二步, 把不需要初始化的变量放到这个段。

GLO_SHARE_MEM g_wMic __attribute__((section(".no_init")));

代码能编译通过,也能跑起来。但是bin文件大了很多。改之前是80KB左右,改之后一下变成100KB. 打开bin文件发现bin文件最后有将近20KB的0.

image.png

看了list文件也没找到这些0是什么东西。向大神求救。

补充:编译器是GCC

此帖出自编程基础论坛

回复

326

帖子

0

资源

一粒金砂(中级)

后面的20K的0 删掉 升级后能否运行呢

点评

好问题。我来试一下。  详情 回复 发表于 2020-8-10 10:23

回复

440

帖子

0

资源

一粒金砂(高级)

宋元浩 发表于 2020-8-10 09:37 后面的20K的0 删掉 升级后能否运行呢

好问题。我来试一下。


回复

2557

帖子

1

资源

五彩晶圆(初级)

.noinit :

{

    KEEP(*(.noinit))

    . = ALIGN(x);

} > data

试试

个人签名人已离开,无事别找,找也找不到。

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

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表