aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt5
-rw-r--r--src/FreeRTOSConfig.h2
-rw-r--r--src/libs/lv_conf.h8
-rw-r--r--src/stdlib.c27
4 files changed, 36 insertions, 6 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f554dc68..1935f8fc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -367,6 +367,7 @@ list(APPEND IMAGE_FILES
displayapp/icons/battery/batteryicon.c
)
list(APPEND SOURCE_FILES
+ stdlib.c
FreeRTOS/heap_4_infinitime.c
BootloaderVersion.cpp
logging/NrfLogger.cpp
@@ -496,6 +497,7 @@ list(APPEND SOURCE_FILES
)
list(APPEND RECOVERY_SOURCE_FILES
+ stdlib.c
FreeRTOS/heap_4_infinitime.c
BootloaderVersion.cpp
@@ -560,6 +562,7 @@ list(APPEND RECOVERY_SOURCE_FILES
)
list(APPEND RECOVERYLOADER_SOURCE_FILES
+ stdlib.c
FreeRTOS/heap_4_infinitime.c
# FreeRTOS
@@ -786,7 +789,7 @@ add_definitions(-DOS_CPUTIME_FREQ)
add_definitions(-DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF52_PAN_64 -DNRF52_PAN_12 -DNRF52_PAN_58 -DNRF52_PAN_54 -DNRF52_PAN_31 -DNRF52_PAN_51 -DNRF52_PAN_36 -DNRF52_PAN_15 -DNRF52_PAN_20 -DNRF52_PAN_55 -DBOARD_PCA10040)
add_definitions(-DFREERTOS)
add_definitions(-D__STACK_SIZE=1024)
-add_definitions(-D__HEAP_SIZE=4096)
+add_definitions(-D__HEAP_SIZE=0)
add_definitions(-DMYNEWT_VAL_BLE_LL_RFMGMT_ENABLE_TIME=1500)
# Note: Only use this for debugging
diff --git a/src/FreeRTOSConfig.h b/src/FreeRTOSConfig.h
index 263d8031..ab0cf1ba 100644
--- a/src/FreeRTOSConfig.h
+++ b/src/FreeRTOSConfig.h
@@ -62,7 +62,7 @@
#define configTICK_RATE_HZ 1024
#define configMAX_PRIORITIES (3)
#define configMINIMAL_STACK_SIZE (120)
-#define configTOTAL_HEAP_SIZE (1024 * 17)
+#define configTOTAL_HEAP_SIZE (1024 * 40)
#define configMAX_TASK_NAME_LEN (4)
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h
index 063f1d34..795760ef 100644
--- a/src/libs/lv_conf.h
+++ b/src/libs/lv_conf.h
@@ -71,7 +71,7 @@ typedef int16_t lv_coord_t;
* The graphical objects and other related data are stored here. */
/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and `lv_mem_free` */
-#define LV_MEM_CUSTOM 0
+#define LV_MEM_CUSTOM 1
#if LV_MEM_CUSTOM == 0
/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
#define LV_MEM_SIZE (14U * 1024U)
@@ -86,9 +86,9 @@ typedef int16_t lv_coord_t;
/* Automatically defrag. on free. Defrag. means joining the adjacent free cells. */
#define LV_MEM_AUTO_DEFRAG 1
#else /*LV_MEM_CUSTOM*/
-#define LV_MEM_CUSTOM_INCLUDE <stdlib.h> /*Header for the dynamic memory function*/
-#define LV_MEM_CUSTOM_ALLOC malloc /*Wrapper to malloc*/
-#define LV_MEM_CUSTOM_FREE free /*Wrapper to free*/
+#define LV_MEM_CUSTOM_INCLUDE <FreeRTOS.h> /*Header for the dynamic memory function*/
+#define LV_MEM_CUSTOM_ALLOC pvPortMalloc /*Wrapper to malloc*/
+#define LV_MEM_CUSTOM_FREE vPortFree /*Wrapper to free*/
#endif /*LV_MEM_CUSTOM*/
/* Use the standard memcpy and memset instead of LVGL's own functions.
diff --git a/src/stdlib.c b/src/stdlib.c
new file mode 100644
index 00000000..3ad66b37
--- /dev/null
+++ b/src/stdlib.c
@@ -0,0 +1,27 @@
+#include <stdlib.h>
+#include <FreeRTOS.h>
+
+// Override malloc() and free() to use the memory manager from FreeRTOS.
+// According to the documentation of libc, we also need to override
+// calloc and realloc.
+// See https://www.gnu.org/software/libc/manual/html_node/Replacing-malloc.html
+
+void* malloc(size_t size) {
+ return pvPortMalloc(size);
+}
+
+void free(void* ptr) {
+ vPortFree(ptr);
+}
+
+void* calloc(size_t num, size_t size) {
+ (void)(num);
+ (void)(size);
+ // Not supported
+ return NULL;
+}
+
+void *pvPortRealloc(void *ptr, size_t xWantedSize);
+void* realloc( void *ptr, size_t newSize) {
+ return pvPortRealloc(ptr, newSize);
+}