zoukankan      html  css  js  c++  java
  • freertos内存pvPortMalloc 和 malloc 区别 ,以及全局变量占用情况

    一、FREERTOS占用内存

    #define configTOTAL_HEAP_SIZE        ( ( size_t ) ( 30 * 1024 ) )

    Program Size: Code=78364 RO-data=60184 RW-data=1064 ZI-data=48720 

    configTOTAL_HEAP_SIZE 是作为ZI-data被编译。

    二、FREERTOS 的pvPortMalloc 和 <stdlib.h>中的malloc的区别

    pvPortMalloc是从configTOTAL_HEAP_SIZE中申请内存

    malloc是直接从SRAM 堆 中申请内存,是和全局变量一个地位

    实验证明如下:

    当然xTaskCreate(uart_task,"uart_task",256,NULL,6,NULL); 函数也是从configTOTAL_HEAP_SIZE中申请内存,以及创建队列等freertos相关函数也是

     三、全局变量的占用。

    实验证明如下:

    对照组:

     

    /*********************************************************************************************************************************/

     

     

     1.定义一个全局变量同时初始化,不管是否引用,则生成在RW-data段,对应map文件的 .data 段

     从上图可以看到RW-data变化了4096个字节,不管是否被引用

    /*********************************************************************************************************************************/

     

     

    2.定义一个全局变量不初始化,且引用了,则生成在ZI-data段,对应map文件的 .bss 段 

    从上图可以看到ZI-data变化了4096个字节,条件是被引用了

     /*********************************************************************************************************************************/

     

     3.定义一个全局变量不初始化,从未引用,则不占用SRAM。在ZI-data 和 RW-data中的都不增加。

    从上图可以看出,其大小和对照组是一样的。

    /*********************************************************************************************************************************/

    编译在哪个段应该是编译器决定的,但我相信大部分编译器都是这个规则。

  • 相关阅读:
    2011年9月11日的最后几分钟开始学习Zend freamework
    PHP常用的调试技术 一周的时间正在整理
    二叉树最近共同祖先问题
    最近一段时间的思考
    字符编码笔记:ASCII,Unicode和UTF8
    node简介
    如何影响别人
    HTTP协议状态码详解(HTTP Status Code)
    jQuery常见的50种用法
    php上传多张图片
  • 原文地址:https://www.cnblogs.com/ycpkbql/p/11457505.html
Copyright © 2011-2022 走看看