介绍了如何获取剩余内存堆空间,如何准确分配内存。
1.获取剩余内存堆空间
下面两个是由ESP官方提供的函数
1 2 3
| int ESP.getHeapSize()
int ESP.getFreeHeap()
|
下面介绍获取单个任务的剩余堆空间
1
| int uxTaskGetStackHighWaterMark(taskHandle)
|
下面是一个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| int heapSize = ESP.getHeapSize(); Serial.print("Total Heap Size: "); Serial.print(heapSize); Serial.println(" Bytes");
int heapFree = ESP.getFreeHeap(); Serial.print("Free Heap Size: "); Serial.print(heapFree); Serial.println(" Bytes"); Serial.println("");
int taskMem = 1024;
xTaskCreate(task, "", taskMem, NULL, 1, &taskHandle);
vTaskDelay(2000); int waterMark = uxTaskGetStackHighWaterMark(taskHandle); Serial.print("Task Free Memory: "); Serial.print(waterMark); Serial.println(" Bytes"); Serial.print("Task Used Memory: "); Serial.print(taskMem - waterMark); Serial.println(" Bytes");
|
2.正确分配内存
提供获取剩余内存来算出任务使用的内存,再将xTaskCreate的对应参数设置为使用内存的2倍是较为保险的设置。