先使用Keil軟件仿真運行程序學習,RT-Thread Simulator 例程,例程結合B站視頻一起學習。程序包括多個例程。
以下爲看視頻的筆記。。。。
棧(stack):有編譯器自動分配釋放
堆(heap):一般有程序員分配釋放
int a = 0; //全局初始化區
char *p1; //全局未初始化區
mian()
{
int b; //棧
char s[] = "abc123"; //棧
char *p2; //棧
char *p3 = "123654"; //123654在常量區,p3在棧上
static int c = 0; //全局(靜態)初始化區
p1 = (char *)malloc(10); //堆
p2 = (char *)malloc(15); //堆
}
void rt_system_heap_init(void *begin_addr, void *end_addr)//系統分配堆的大小函數API
{
.......
}
點擊工程文件可以打開map文件查看系統RAM,ROM使用大小。
char *p;
int num = 10;
p = (char *)rt_malloc(num);
/* 如果分配成功 */
if (ptr != RT_NULL)
{
rt_memset(p,0,num);
}
//.......處理內容....
rt_free(p);
//通過以上API分配動態內存配置和使用
//總的 RW + heap size = MCU 使用RAM的大小
內存復位:當我們每次申請到新的內存塊之後,建議對所申請的內存塊進行清零操作。
內存泄漏:我們在使用動態內存時要注意,rt_malloc()需要和rt_free()配套使用。
void * rt_realloc(void *rmem,rt_size_t newsize)
在內存分配塊的基礎上重新分配內存塊的大小(增加或縮減)
在進行重新分配內存塊時,原來的內存塊數據保持不變(縮小的情況下,後面的數據被自動截斷)
void * rt_calloc(rt_size_t count,rt_size_t size)
從內存堆中分配連續內存地址的多個內存塊