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中的都不增加。

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

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

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

  • 相关阅读:
    二维数组
    ASCII_02_扩展
    ASCII_01
    【转】如何监控某个驱动器或目录及其下面的所有子目录的创建文件的动作
    webpack+vue2.0项目 (一) vue-cli脚手架
    分享两个常用的rem布局方式
    移动端border:1px问题解决方案
    sticky footer 布局
    用js数组实现最原始的图片轮播实现
    分享按钮(QQ,微信,微博等)移入动画效果
  • 原文地址:https://www.cnblogs.com/ycpkbql/p/11457505.html
Copyright © 2011-2022 走看看