一、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中的都不增加。
從上圖可以看出,其大小和對照組是一樣的。
/*********************************************************************************************************************************/
編譯在哪個段應該是編譯器決定的,但我相信大部分編譯器都是這個規則。