From 179213694ccb50b50b76e2156ae2f12ed5ccccb3 Mon Sep 17 00:00:00 2001 From: Julius Rudolph Date: Fri, 17 Sep 2021 17:45:39 +0200 Subject: [PATCH 1/2] test PSRAM by using stdlib new operator. works. --- firmware/platformio.ini | 2 +- firmware/src/main.cpp | 60 ++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/firmware/platformio.ini b/firmware/platformio.ini index b2f5dfe..48f4852 100644 --- a/firmware/platformio.ini +++ b/firmware/platformio.ini @@ -20,7 +20,7 @@ build_flags = -frtti -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue - -nostdlib + ; -nostdlib #-DENABLE_CRASHDUMP #-DENABLE_PERFMON # use this while debugging diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index 5fa6fc1..d74f76a 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -5,17 +5,17 @@ #include "tasks/taskRegistry.hpp" #include "utils/serial.hpp" -#include -#include +// #include +// #include -void *operator new(size_t size) noexcept { return ps_malloc(size); } -void operator delete(void *p) noexcept { free(p); } -void *operator new[](size_t size) noexcept { return operator new(size); } -void operator delete[](void *p) noexcept { operator delete(p); } -void *operator new(size_t size, std::nothrow_t) noexcept { return operator new(size); } -void operator delete(void *p, std::nothrow_t) noexcept { operator delete(p); } -void *operator new[](size_t size, std::nothrow_t) noexcept { return operator new(size); } -void operator delete[](void *p, std::nothrow_t) noexcept { operator delete(p); } +// void *operator new(size_t size) noexcept { return ps_malloc(size); } +// void operator delete(void *p) noexcept { free(p); } +// void *operator new[](size_t size) noexcept { return operator new(size); } +// void operator delete[](void *p) noexcept { operator delete(p); } +// void *operator new(size_t size, std::nothrow_t) noexcept { return operator new(size); } +// void operator delete(void *p, std::nothrow_t) noexcept { operator delete(p); } +// void *operator new[](size_t size, std::nothrow_t) noexcept { return operator new(size); } +// void operator delete[](void *p, std::nothrow_t) noexcept { operator delete(p); } void setup() @@ -24,29 +24,29 @@ void setup() Serial.begin(115200); bool ramFound = psramInit(); log_d("Ram found %d", ramFound); - DPSerial::init(); - DPSerial::sendInstantDebugLog("========== START =========="); - Tasks.emplace( - std::piecewise_construct, - std::forward_as_tuple("I/O"), - std::forward_as_tuple(&ioSetup, &ioLoop, "I/O", 0)); - Tasks.at("I/O").run(); - Tasks.at("I/O").setLogFps(); - Tasks.emplace( - std::piecewise_construct, - std::forward_as_tuple("Physics"), - std::forward_as_tuple(&physicsSetup, &physicsLoop, "Physics", 1)); - Tasks.at("Physics").run(); + // DPSerial::init(); + // DPSerial::sendInstantDebugLog("========== START =========="); + // Tasks.emplace( + // std::piecewise_construct, + // std::forward_as_tuple("I/O"), + // std::forward_as_tuple(&ioSetup, &ioLoop, "I/O", 0)); + // Tasks.at("I/O").run(); + // Tasks.at("I/O").setLogFps(); + // Tasks.emplace( + // std::piecewise_construct, + // std::forward_as_tuple("Physics"), + // std::forward_as_tuple(&physicsSetup, &physicsLoop, "Physics", 1)); + // Tasks.at("Physics").run(); - TaskHandle_t defaultTask = xTaskGetCurrentTaskHandle(); - DPSerial::sendInstantDebugLog("default task handle is %i", defaultTask); - vTaskSuspend(NULL); - taskYIELD(); - DPSerial::sendInstantDebugLog("setup - this should not be printed"); + // TaskHandle_t defaultTask = xTaskGetCurrentTaskHandle(); + // DPSerial::sendInstantDebugLog("default task handle is %i", defaultTask); + // vTaskSuspend(NULL); + // taskYIELD(); + // DPSerial::sendInstantDebugLog("setup - this should not be printed"); } void loop() { - DPSerial::sendInstantDebugLog("loop - this should not be printed"); - delay(1000); + // DPSerial::sendInstantDebugLog("loop - this should not be printed"); + // delay(1000); } From a148e4250ca0bebf34e9d02fa5fd64b9771d1852 Mon Sep 17 00:00:00 2001 From: Julius Rudolph Date: Mon, 8 Nov 2021 18:59:25 +0100 Subject: [PATCH 2/2] add custom SPI ram allocator --- firmware/platformio.ini | 4 ++-- firmware/src/utils/spiramallocator.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 firmware/src/utils/spiramallocator.cpp diff --git a/firmware/platformio.ini b/firmware/platformio.ini index 48f4852..ee90b47 100644 --- a/firmware/platformio.ini +++ b/firmware/platformio.ini @@ -18,8 +18,8 @@ build_flags = -DENABLE_FPS -g -frtti - -DBOARD_HAS_PSRAM - -mfix-esp32-psram-cache-issue + ; -DBOARD_HAS_PSRAM + ; -mfix-esp32-psram-cache-issue ; -nostdlib #-DENABLE_CRASHDUMP #-DENABLE_PERFMON diff --git a/firmware/src/utils/spiramallocator.cpp b/firmware/src/utils/spiramallocator.cpp new file mode 100644 index 0000000..079d52a --- /dev/null +++ b/firmware/src/utils/spiramallocator.cpp @@ -0,0 +1,15 @@ +#include "esp_heap_caps.h" + +struct SpiRamAllocator { + void* allocate(size_t size) { + return heap_caps_malloc(size, MALLOC_CAP_SPIRAM); + } + + void deallocate(void* pointer) { + heap_caps_free(pointer); + } + + void* reallocate(void* ptr, size_t new_size) { + return heap_caps_realloc(ptr, new_size, MALLOC_CAP_SPIRAM); + } +}; \ No newline at end of file