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

YunTu Forum

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

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

已定时 已固定 已锁定 已移动 YTM32B1H系列
6 帖子 3 发布者 503 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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
      编写于 最后由 编辑
      #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

            • 云途开发生态介绍

              快速上手云途开发生态

            • 云途论坛规则/Yuntu Forum Rules

              发帖前请查看

            • YT CONFIG TOOL调查问卷

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

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

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