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

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

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

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

  • 相关阅读:
    洛谷P1613 跑路
    洛谷P2149 Elaxia的路线
    洛谷P3119 草鉴定
    洛谷P1972 HH的项链
    洛谷P2458 保安站岗
    uva10061
    uva579
    uva 127 "Accordian" Patience
    uva10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
    uva156
  • 原文地址:https://www.cnblogs.com/ycpkbql/p/11457505.html
Copyright © 2020-2023  润新知