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

從上圖可以看出,其大小和對照組是一樣的。

 

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

編譯在哪個段應該是編譯器決定的,但我相信大部分編譯器都是這個規則。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM