zoukankan      html  css  js  c++  java
  • 解决main.o(.data) type RW incompatible with bsp.o(.ARM.__AT_0x24001000) type ZI in er RW_IRAM2.(转载)

    原创 最后发布于2019-01-11 16:54:52 阅读数 1304 收藏

    产生原因如错误信息所述,程序里面使用了指定某个变量地址的语句,现在这个指定的地址和main文件中的变量冲突了。比如下面这种用法:

    u8 buffer[0x00020000]  __attribute__((at(0x24000000)));  

    按照网上的说法,上面这种用法只是强行操作变量的地址,编译器并没有真正开辟空间,因此这个地址是否被其他数据使用,编译器不知道。

    解决方法:

    1、可以这么使用:

    u8 buffer[0x00020000]  __attribute__ ((section ("buffer"),  zero_init));

    给这个变量指定一个段名“buffer”,然后在分散加载文件中,把段名“buffer”放到内存区中。

    1.  
      RW_IRAM2 0x24000000 0x00080000 { ;512K
    2.  
      * (buffer)
    3.  
      .ANY (+RW +ZI)
    4.  
      }

    编译器就会自动给buffer分配空间,也就是给变量分配空间了。这种方法适用于,单片机有多个内存区,想把变量指定到某个内存区时。比如单片机有AXI SRAM、SRAM1、SRAM4,要把变量放到AXI SRAM。

    1.  
      RW_IRAM2 0x24020000 0x00080000 { ;AXI SRAM--512K
    2.  
      * (buffer)
    3.  
      .ANY (+RW +ZI)
    4.  
      }
    5.  
       
    6.  
      RW_IRAM3 0x30000000 0x00048000 { ;SRAM1,2,3--288K
    7.  
      .ANY (+RW +ZI)
    8.  
      }
    9.  
       
    10.  
      RW_IRAM4 0x38000000 0x00010000 { ;SRAM4--64K
    11.  
      .ANY (+RW +ZI)
    12.  
      }

    2、上面那种,并不能准确指定变量地址,要准确指定就只能麻烦点,在分散加载文件上,把变量的地址避开了。

    1.  
      RW_IRAM2 0x24020000 0x00080000 { ;AXI SRAM--512K
    2.  
      .ANY (+RW +ZI)
    3.  
      }
  • 相关阅读:
    RabbitMQ(四)
    RabbitMQ(三)
    RabbitMQ(二)
    定位
    响应式布局
    学习前端的一些心得
    css样式大全
    常用标签
    HTML
    app 被拒绝原因
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12182630.html
Copyright © 2011-2022 走看看