Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    【FAQ】全志XR系列 如何统计XRMCU的内存使用情况

    其它全志芯片讨论区
    xr806 xr872 faq 技术支持
    1
    1
    1474
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q1215200171
      budbool LV 9 last edited by

      问题背景
      有客户反馈代码运行奔溃,但始终找不到原因,经排查后发现是剩余RAM不足导致的。客户把所有应用内存直接保存到SRAM中,导致内存不足,跑应用时踩内存导致系统奔溃。

      问题描述
      因为代码全放在RAM中导致内存不足,跑应用时容易踩内存系统奔溃,但如何统计内存使用情况并优化?

      问题分析

      • 内存是如何保存到指定位置的?
        GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。

      • 哪些代码可以放在XIP,哪些代码必须放在SRAM?
        可以简单记忆为XIP需要初始化,XIP初始化前会调用的代码不用放在XIP,如malloc,rtos的代码。中断的时间要求尽量短,也不要调用XIP的代码。

      解决方法
      SDK中提供了内存分析工具,以XR806为例,内存分析工具为tools\map_parse_gcc_v3.py,以audio_demo为例,使用方法为:

      python map_parse_gcc_v3.py audio_demo.map
      

      稍等片刻在bash中会显示内存统计情况:

      =================================
      Usage:
        map_parse_version: 1.0.4
        map_parse_gcc.py xxx.map
      =================================
      Memory Sections:
      RAM              0x0000000000201000 0x000000000004b000 xrw
      FLASH            0x0000000000400000 0x0000000000800000 xr
      PSRAM            0x0000000001400000 0x0000000000000000 xrw
      *default*        0x0000000000000000 0xffffffffffffffff
                                  MEMORY MAP
      |===========================================================================|
      | MODULE                                   | RAM      | FLASH    | PSRAM    |
      |===========================================================================|
      | atomic                                   | 0        | 28       | 0        |
      | board                                    | 20       | 14       | 0        |
      | board_common                             | 602      | 0        | 0        |
      | board_config                             | 1216     | 304      | 0        |
      | captureControl_rtos                      | 0        | 467      | 0        |
      | card_pcm                                 | 0        | 712      | 0        |
      ................
      ................
      | sys_monitor                              | 0        | 814      | 0        |
      | *fill*                                   | 149      | 1179     | 0        |
      |===========================================================================|
      | TOTAL (bytes)                            | 95045    | 1032493  | 0        |
      | MEM LIMIT                                | 307200   | 8388608  | 0        |
      | MEM LEFT                                 | 212155   | 7356115  | 0        |
      |===========================================================================|
      

      其中lib打头的一般是.a静态库,其余为.o可执行文件,如果确定该section可以放在xip,修改project\linker_script\gcc\appos.ld,在xip.section添加对应的目标,常用的写法如下:

          .xip :
          {
              . = ALIGN(16);
              __xip_start__ = .;
              *AAA.a: (.text .text.* .rodata .rodata.*)  //某个静态库的text和rodata都存到xip中
              *AAA.a:bbb.o (.text .text.* .rodata .rodata.*) //某个静态库中的某个.o存到xip中
              *AAA.a: (EXCLUDE_FILE (bbb.o) .text) //某个静态库中除了bbb.o的text段,其余放到xip中
              *bbb.*.o (.text .text.* .rodata .rodata.*) //bbb打头的所有.o存进xip中,常用于同一个make,但没有编译出静态库的场合
      
      1 Reply Last reply Reply Quote Share 0
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策