Skip to content

feat(memory): add c++ global allocate functions #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
matrix:
idf_ver: ["release-v5.1", "release-v5.2", "release-v5.3"]
idf_target: ["esp32", "esp32s3"]
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
container: espressif/idf:${{ matrix.idf_ver }}
steps:
- uses: actions/checkout@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/check_lib_versions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
check_lib_versions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Get latest release info of repository
id: last_release
uses: InsonusK/get-latest-release@v1.1.0
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: pre-commit/action@v2.0.3
- uses: actions/checkout@v3
- uses: actions/setup-python@v5.2.0
- uses: pre-commit/action@v3.0.1
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# ChangeLog

## v0.2.1 - 2025-04-29

### Enhancements:

* feat(memory): add C++ global memory allocation

## v0.2.0 - 2025-02-07

### Enhancements:
Expand Down
7 changes: 4 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
set(SRC_DIR ./src)
file(GLOB_RECURSE SRCS ${SRC_DIR}/*.c)
file(GLOB_RECURSE SRCS_C ${SRC_DIR}/*.c)
file(GLOB_RECURSE SRCS_CPP ${SRC_DIR}/*.cpp)

idf_component_register(
SRCS ${SRCS}
SRCS ${SRCS_C} ${SRCS_CPP}
INCLUDE_DIRS ${SRC_DIR}
)

target_compile_options(${COMPONENT_LIB}
PUBLIC
-Wno-missing-field-initializers
PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:-std=gnu++17>
$<$<COMPILE_LANGUAGE:CXX>:-std=gnu++20>
)
324 changes: 208 additions & 116 deletions Kconfig
Original file line number Diff line number Diff line change
@@ -1,122 +1,214 @@
menu "ESP Library Utils Configurations"
config ESP_UTILS_CONF_FILE_SKIP
bool "Unckeck this to use custom `esp_utils_conf.h`"
bool "Enable to skip `esp_utils_conf.h`"
default y

menu "Check functions"
depends on ESP_UTILS_CONF_FILE_SKIP
choice ESP_UTILS_CONF_CHECK_HANDLE_METHOD
prompt "Select handle method when check failed"
default ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG

config ESP_UTILS_CHECK_HANDLE_WITH_NONE
bool "Do nothing"

config ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
bool "Print error message"

config ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
bool "Assert"
endchoice

config ESP_UTILS_CONF_CHECK_HANDLE_METHOD
int
default 0 if ESP_UTILS_CHECK_HANDLE_WITH_NONE
default 1 if ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
default 2 if ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
endmenu

menu "Log functions"
depends on ESP_UTILS_CONF_FILE_SKIP

choice ESP_UTILS_CONF_LOG_LEVEL
prompt "Select global log level"
default ESP_UTILS_CONF_LOG_LEVEL_INFO

config ESP_UTILS_CONF_LOG_LEVEL_DEBUG
bool "Debug"
help
If want to use `esp_utils_conf.h` to configure the library, uncheck this option. Otherwise, the configurations in sdkconfig will be used.

if ESP_UTILS_CONF_FILE_SKIP
menu "Check functions"
choice ESP_UTILS_CONF_CHECK_HANDLE_METHOD
prompt "Select handle method when check failed"
default ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG

config ESP_UTILS_CHECK_HANDLE_WITH_NONE
bool "Do nothing"

config ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
bool "Print error message"

config ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
bool "Assert"
endchoice

config ESP_UTILS_CONF_CHECK_HANDLE_METHOD
int
default 0 if ESP_UTILS_CHECK_HANDLE_WITH_NONE
default 1 if ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
default 2 if ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
endmenu

menu "Log functions"
choice ESP_UTILS_CONF_LOG_LEVEL
prompt "Select global log level"
default ESP_UTILS_CONF_LOG_LEVEL_INFO

config ESP_UTILS_CONF_LOG_LEVEL_DEBUG
bool "Debug"
help
Extra information which is not necessary for normal use (values, pointers, sizes, etc)

config ESP_UTILS_CONF_LOG_LEVEL_INFO
bool "Info"
help
Information messages which describe the normal flow of events

config ESP_UTILS_CONF_LOG_LEVEL_WARNING
bool "Warning"
help
Error conditions from which recovery measures have been taken

config ESP_UTILS_CONF_LOG_LEVEL_ERROR
bool "Error"
help
Critical errors, software module cannot recover on its own

config ESP_UTILS_CONF_LOG_LEVEL_NONE
bool "None"
help
No log output
endchoice

config ESP_UTILS_CONF_LOG_LEVEL
int
default 0 if ESP_UTILS_CONF_LOG_LEVEL_DEBUG
default 1 if ESP_UTILS_CONF_LOG_LEVEL_INFO
default 2 if ESP_UTILS_CONF_LOG_LEVEL_WARNING
default 3 if ESP_UTILS_CONF_LOG_LEVEL_ERROR
default 4 if ESP_UTILS_CONF_LOG_LEVEL_NONE

config ESP_UTILS_CONF_ENABLE_LOG_TRACE
bool "Enable trace function"
depends on ESP_UTILS_CONF_LOG_LEVEL_DEBUG
default n
help
Extra information which is not necessary for normal use (values, pointers, sizes, etc)

config ESP_UTILS_CONF_LOG_LEVEL_INFO
bool "Info"
help
Information messages which describe the normal flow of events

config ESP_UTILS_CONF_LOG_LEVEL_WARNING
bool "Warning"
help
Error conditions from which recovery measures have been taken

config ESP_UTILS_CONF_LOG_LEVEL_ERROR
bool "Error"
help
Critical errors, software module cannot recover on its own

config ESP_UTILS_CONF_LOG_LEVEL_NONE
bool "None"
If enabled, the driver will print trace log messages when enter/exit functions, useful for debugging
endmenu

menu "Memory functions"
depends on ESP_UTILS_CONF_FILE_SKIP

menu "C/C++ general allocator"
config ESP_UTILS_CONF_MEM_GEN_ALLOC_DEFAULT_ENABLE
bool "Default enable allocation"
default y
help
If enabled, the driver will use general memory allocation by default, otherwise, the driver will use
the standard `malloc` and `free` by default

choice ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CHOICE
prompt "Select allocation type"
default ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
bool "Standard (malloc, free)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
bool "ESP (`heap_caps_malloc`, `heap_caps_free`)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
bool "MicroPython (`mp_malloc`, `mp_free`)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
bool "Custom (`ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_NEW` and `ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_DELETE`)"
endchoice

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE
int
default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
default 3 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM

choice ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS
prompt "ESP memory caps"
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
default ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_DEFAULT

config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_DEFAULT
bool "Default"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_SRAM
bool "Internal RAM (SRAM)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_PSRAM
bool "External RAM (PSRAM)"
endchoice

config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS
int
default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_DEFAULT
default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_SRAM
default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_PSRAM

config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_ALIGN
int "ESP memory alignment (bytes)"
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
default 1
range 1 1024

config ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_INCLUDE
string "Custom memory header file"
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
default ""
endmenu

menuconfig ESP_UTILS_CONF_MEM_ENABLE_CXX_GLOB_ALLOC
bool "C++ global allocator"
default n
help
No log output
endchoice

config ESP_UTILS_CONF_LOG_LEVEL
int
default 0 if ESP_UTILS_CONF_LOG_LEVEL_DEBUG
default 1 if ESP_UTILS_CONF_LOG_LEVEL_INFO
default 2 if ESP_UTILS_CONF_LOG_LEVEL_WARNING
default 3 if ESP_UTILS_CONF_LOG_LEVEL_ERROR
default 4 if ESP_UTILS_CONF_LOG_LEVEL_NONE

config ESP_UTILS_CONF_ENABLE_LOG_TRACE
bool "Enable trace function"
depends on ESP_UTILS_CONF_LOG_LEVEL_DEBUG
default n
help
If enabled, the driver will print trace log messages when enter/exit functions, useful for debugging
endmenu

menu "Memory functions"
depends on ESP_UTILS_CONF_FILE_SKIP
config ESP_UTILS_CONF_MEM_GEN_ALLOC_DEFAULT_ENABLE
bool "Default enable general memory allocation"
default y
help
If enabled, the driver will use general memory allocation by default, otherwise, the driver will use
`malloc` and `free` by default

choice ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CHOICE
prompt "Select general allocation type"
default ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
bool "Standard library (malloc, free)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
bool "ESP (heap_caps_malloc, free)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
bool "MicroPython (mp_malloc, mp_free)"

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
bool "Custom (`ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_MALLOC` and `ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_FREE`)"
endchoice

config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE
int
default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
default 3 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM

config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_ALIGN
int "General esp memory alignment (bytes)"
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
default 1
range 1 1024

config ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_INCLUDE
string "General custom memory header file"
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
default "stdlib.h"
endmenu
If enabled, the driver will override `new` and `delete` operators to use global memory allocator

if ESP_UTILS_CONF_MEM_ENABLE_CXX_GLOB_ALLOC
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_DEFAULT_ENABLE
bool "Default enable allocation"
default y
help
If enabled, the driver will use global memory allocation by default, otherwise, the driver will use
the standard `new` and `delete` by default.

choice ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CHOICE
prompt "Select allocation type"
default ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
bool "ESP (`heap_caps_malloc`, `heap_caps_free`)"

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_MICROPYTHON
bool "MicroPython (`mp_malloc`, `mp_free`)"

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CUSTOM
bool "Custom (`ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_CUSTOM_NEW` and `ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_CUSTOM_DELETE`)"
endchoice

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE
int
default 1 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
default 2 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_MICROPYTHON
default 3 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CUSTOM

choice ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS
prompt "ESP memory caps"
depends on ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
default ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_DEFAULT

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_DEFAULT
bool "Default"

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_SRAM
bool "Internal RAM (SRAM)"

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_PSRAM
bool "External RAM (PSRAM)"
endchoice

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS
int
default 0 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_DEFAULT
default 1 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_SRAM
default 2 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_PSRAM

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_ALIGN
int "ESP memory alignment (bytes)"
depends on ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
default 1
range 1 1024

config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_CUSTOM_INCLUDE
string "Custom memory header file"
depends on ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CUSTOM
default ""
endif # ESP_UTILS_CONF_MEM_ENABLE_CXX_GLOB_ALLOC
endmenu
endif # ESP_UTILS_CONF_FILE_SKIP
endmenu
Loading
Loading