STM32堆區分配記憶體--malloc的使用
阿新 • • 發佈:2019-01-30
測試環境:STM32+IAR6.4
堆區大小設定為0x1000(預設值)。
變數定義:
char *p=NULL;
char *p2=NULL;
1. 申請記憶體大小超過設定值
p = (char *)malloc(sizeof(char)*5090);
malloc返回NULL,使用這段記憶體是會出錯(硬體錯誤)。
申請記憶體,使用完畢後要釋放。
IAR設定堆疊大小 option->Linker -> Config -> Override default ->Edit。
堆區大小設定為0x1000(預設值)。
變數定義:
char *p=NULL;
char *p2=NULL;
1. 申請記憶體大小超過設定值
p = (char *)malloc(sizeof(char)*5090);
malloc返回NULL,使用這段記憶體是會出錯(硬體錯誤)。
2.申請兩段記憶體,每段不超過設定值,但總和超過設定值。
p = (char *)malloc(sizeof(char)*3090); if(p== NULL) { printf("malloc error1\r\n"); } p2 = (char *)malloc(sizeof(char)*3090); if(p2== NULL) { printf("malloc error2\r\n"); }
3.申請一段記憶體,使用完畢後釋放掉,然後再申請一段記憶體
p = (char *)malloc(sizeof(char)*3090);
if(p== NULL)
{
printf("malloc error1\r\n");
}
...
free(p);
p2 = (char *)malloc(sizeof(char)*3090);
if(p2== NULL)
{
printf("malloc error2\r\n");
}
...
free(p2);
使用正常。申請記憶體,使用完畢後要釋放。
IAR設定堆疊大小 option->Linker -> Config -> Override default ->Edit。