Explorar el Código

heap: add tlsf config specific to the host test

Felipe Neves hace 5 años
padre
commit
35ef4ffa99

+ 1 - 0
components/heap/heap_tlsf.c

@@ -37,6 +37,7 @@
 #include "multi_heap_config.h"
 #include "multi_heap.h"
 #include "multi_heap_internal.h"
+#include "heap_tlsf_config.h"
 #include "heap_tlsf.h"
 
 /*

+ 0 - 1
components/heap/heap_tlsf.h

@@ -43,7 +43,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stddef.h>
-#include "sdkconfig.h"
 #include "heap_tlsf_config.h"
 
 #if defined(__cplusplus)

+ 44 - 3
components/heap/heap_tlsf_config.h

@@ -37,13 +37,23 @@
 
 #pragma once
 
+#ifdef ESP_PLATFORM
+
+#include "soc/soc.h"
+
+#if !CONFIG_SPIRAM
+#define TLSF_MAX_POOL_SIZE (SOC_DIRAM_DRAM_HIGH - SOC_DIRAM_DRAM_LOW)
+#else
+#define TLSF_MAX_POOL_SIZE SOC_EXTRAM_DATA_SIZE
+#endif
+
 enum tlsf_config
 {
 	/* log2 of number of linear subdivisions of block sizes. Larger
 	** values require more memory in the control structure. Values of
 	** 4 or 5 are typical.
 	*/
-	SL_INDEX_COUNT_LOG2  = 2,
+	SL_INDEX_COUNT_LOG2  = 3,
 
 	/* All allocation sizes and addresses are aligned to 4 bytes. */
 	ALIGN_SIZE_LOG2 = 2,
@@ -63,10 +73,14 @@ enum tlsf_config
 	/* Tunning the first level, we can reduce TLSF pool overhead
 	 * in exchange of manage a pool smaller than 4GB
 	 */
-	#ifndef CONFIG_SPIRAM
+	#if (TLSF_MAX_POOL_SIZE <= (256 * 1024))
 	FL_INDEX_MAX = 18, //Each pool can have up 256KB
+	#elif (TLSF_MAX_POOL_SIZE <= (512 * 1024))
+	FL_INDEX_MAX = 19, //Each pool can have up 512KB
+	#elif (TLSF_MAX_POOL_SIZE <= (16 * 1024 * 1024))
+	FL_INDEX_MAX = 24, //Each pool can have up 16MB
 	#else
-	FL_INDEX_MAX = 23, //Each pool can have up 8MB
+	#error "Higher TLSF pool sizes should be added for this new config"
 	#endif
 
 	SL_INDEX_COUNT = (1 << SL_INDEX_COUNT_LOG2),
@@ -75,3 +89,30 @@ enum tlsf_config
 
 	SMALL_BLOCK_SIZE = (1 << FL_INDEX_SHIFT),
 };
+#else
+enum tlsf_config
+{
+	//Specific configuration for host test.
+
+	/* log2 of number of linear subdivisions of block sizes. Larger
+	** values require more memory in the control structure. Values of
+	** 4 or 5 are typical.
+	*/
+	SL_INDEX_COUNT_LOG2  = 5,
+
+	/* All allocation sizes and addresses are aligned to 4 bytes. */
+	ALIGN_SIZE_LOG2 = 2,
+	ALIGN_SIZE = (1 << ALIGN_SIZE_LOG2),
+
+	/* Tunning the first level, we can reduce TLSF pool overhead
+	 * in exchange of manage a pool smaller than 4GB
+	 */
+	FL_INDEX_MAX = 30,
+
+	SL_INDEX_COUNT = (1 << SL_INDEX_COUNT_LOG2),
+	FL_INDEX_SHIFT = (SL_INDEX_COUNT_LOG2 + ALIGN_SIZE_LOG2),
+	FL_INDEX_COUNT = (FL_INDEX_MAX - FL_INDEX_SHIFT + 1),
+
+	SMALL_BLOCK_SIZE = (1 << FL_INDEX_SHIFT),
+};
+#endif

+ 2 - 0
components/heap/multi_heap_config.h

@@ -15,6 +15,8 @@
 
 #ifdef ESP_PLATFORM
 #include "sdkconfig.h"
+#include "soc/soc.h"
+#include "soc/soc_caps.h"
 #endif
 
 /* Configuration macros for multi-heap */