跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. IAR编译优化初值为0的变量到bss段但链接时check failed

IAR编译优化初值为0的变量到bss段但链接时check failed

已定时 已固定 已锁定 已移动 已解决 YTM32B1H系列
6 帖子 3 发布者 2.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • wangdiW 离线
    wangdiW 离线
    wangdi
    写于 最后由 wangdi 编辑
    #1

    我们希望把一些变量赋初值为0的变量优化到bss段以节省flash资源,所以我们尝试在IAR的C/C++ Compiler->Extra Options中添加指令--do_explicit_zero_opt_in_named_sections编译
    2440fb2d-2fc8-42c3-8596-75f8020d1ca9-image.png

    但编译后显示链接check failed报错
    8dd5c3fe-0cfd-4be1-9a71-a6e7a0413ee0-image.png

    检查代码发现,我们attribute在data自定义段的变量同样受优化指令影响,导致大小不匹配
    eg.下图红框中的变量对应上面NC_DATA_block 4字节差异
    a3208a36-1794-4d18-878c-91467b041766-image.png
    2a390672-83e0-47ac-a3f7-e67129868f09-image.png

    有以下几个疑问请帮忙解答:

    1. 导致链接check fail的具体原因是什么?
    2. 请问有没有什么好的方法能只将非指定data段且赋初值为0的变量优化编译到bss段,而使用attribute指定的变量保持原样?
    1 条回复 最后回复
    0
    • FrankieF 离线
      FrankieF 离线
      Frankie YunTu
      写于 最后由 编辑
      #4

      用 uint32 testBss;

      1 条回复 最后回复
      0
      • FrankieF 离线
        FrankieF 离线
        Frankie YunTu
        写于 最后由 编辑
        #2

        使用如下方法(可以让testBss为0):

        1. uint32 testBss;

        image.png

        wangdiW 1 条回复 最后回复
        0
        • wangdiW 离线
          wangdiW 离线
          wangdi
          在 回复了 Frankie 最后由 编辑
          #3

          Frankie 你好,我们现在遇到问题的是变量声明时就赋初值0导致放到data段占用flash空间,应该是uint32 testBss = 0u;这种工况。添加clear section只是会在raminit过程中拷贝ram初值0,解决不了我们这个问题

          1 条回复 最后回复
          0
          • FrankieF 离线
            FrankieF 离线
            Frankie YunTu
            写于 最后由 编辑
            #4

            用 uint32 testBss;

            1 条回复 最后回复
            0
            • XTY11X 离线
              XTY11X 离线
              XTY11
              写于 最后由 编辑
              #5

              我们的需求就是uint32 testBss = 0;要放在BSS,而不是使用uint32 testBss; ,其他芯片厂商都能实现,为啥你们平台就有问题

              1 条回复 最后回复
              0
              • FrankieF 离线
                FrankieF 离线
                Frankie YunTu
                写于 最后由 Frankie 编辑
                #6

                从IAR手册看 uint32 testBss =0;是会放在bss。
                image.png


                实际代码测试也是OK的,所以不会占用额外的flash,勾选clearSection,BSS区域会是0:
                edbcaa9e-d3db-48fa-8392-7d0ff491ee13-image.png

                5571b9c8-192e-40b7-975a-8abd7a603ba1-image.png

                cfd5758e-b701-4766-b53b-1ff1672919b3-image.png

                1 条回复 最后回复
                0
                • ,FrankieF Frankie 将这个主题转为问答主题
                • ,FrankieF Frankie 将这个主题标记为已解决

              • 云途开发生态介绍

                快速上手云途开发生态

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YT CONFIG TOOL调查问卷

                帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

              • can
                25
                demo
                22
                lin stack
                13
                uds
                13
                md14
                6
                yt-link
                6
                fbl
                5
                adc模块
                4
                Online Users
                • 登录

                • 登录或注册以进行搜索。
                • 第一个帖子
                  最后一个帖子
                0
                • 版块
                • 最新
                • 标签
                • 热门