zoukankan      html  css  js  c++  java
  • nrf51822 RAM不足分析

    之前了解过STM32 的内存分配问题,对于蓝牙芯片51822的内存分配问题把项目中,遇到了.bss和。data部分超了的问题,这其实就是声明的变量和stask 及 heap的大小总和超出了单片机的RAM,仔细的分析了下NRF51822的ram的分配,这里做下分享。

    首先是看下nrf51822的ROM和RAM 的大小:


    我这边选用的芯片型号是 QAFAC就是有ROM 256kb RAM 32kb.
    文档的20页21页

    下面看下在keil工程中的配置:

    实际中的RAM的开始位置并不是由0x20000000开始,这是因为最开始的部分大约有8K的空间是给了蓝牙协议栈使用。

    我这边使用的蓝牙协议栈版本是S110 找到相应的文档有描述协议栈最小使用的RAM和默认的RAM大小如下:

    有上面可以看到协议栈占有的RAM的大小为8K ,所以片上一共有的32K的RAM给应用程序的实际上只有24K了。

    文档的35页

    下面在看下在启动文件中定义的栈和堆的大小,实际上在程序运行过程中使用的栈和堆以及使用的变量都是存放在RAM中。

    可以看到分配的stask size 为 7200 就认为为7K吧,heap size 为3584 就认为为3K吧。

    在看下编译生成的map文件.

    可以看出这个时候编译出的RW size 是23K 左右,这个时候是单片机的RAM是够用的,当然在链接的时候没有问题,能够生成MAP文件说明片子的RAM肯定是够用的。

    这里说下:
    Code :是程序中代码所占字节大小
    RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only)
    RW-data :程序中已初始化的变量大小 (个人理解”:Read/Write)
    ZI-Data :程序中未初始化的变量大小 (个人理解 :Zero Initialize)

    这里看到的TOAL RW size 其实是包括了启动文件中分配的栈和堆的大小的。

    到这里就知道假如程序报报.bss 或者 .data 数据存储不足的话,如果程序的优化等级已经是-O3的话,这个时候就要考虑动下启动文件中的栈和堆的大小,不过这个在栈和堆如果过小会影响程序的运行,具体在程序运行中怎么测量堆和栈的使用情况这个还没有研究过,这样的话那只能去修改程序中关于变量的申请了,程序中不要声明大的数组,尤其是在牵制到协议解析的时候,不要使用太大的数据区缓存数据。
    ---------------------
    作者:陶孜河畔
    来源:CSDN
    原文:https://blog.csdn.net/u011559046/article/details/80772417
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    简谈单线程多线程的理解
    简谈vuex的理解
    简谈自己对redux的理解
    react-native-1
    react中信息传递的几种方式
    简谈对虚拟Dom的理解
    React-小总结
    移动端解决边框1像素问题
    JavaScript标记上的defer与async的作用与区别
    jQuery.smoove — jQuery和CSS3炫酷滚动页面内容元素动画特效插件
  • 原文地址:https://www.cnblogs.com/jack-hzm/p/10183195.html
Copyright © 2011-2022 走看看