Skip to content

Commit 55e90d3

Browse files
committed
feat(memory): add c++ global allocate functions
1 parent bb9ea3d commit 55e90d3

30 files changed

+959
-548
lines changed

.github/workflows/build_test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
matrix:
1212
idf_ver: ["release-v5.1", "release-v5.2", "release-v5.3"]
1313
idf_target: ["esp32", "esp32s3"]
14-
runs-on: ubuntu-20.04
14+
runs-on: ubuntu-22.04
1515
container: espressif/idf:${{ matrix.idf_ver }}
1616
steps:
1717
- uses: actions/checkout@v3

.github/workflows/check_lib_versions.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
check_lib_versions:
99
runs-on: ubuntu-latest
1010
steps:
11-
- uses: actions/checkout@v2
11+
- uses: actions/checkout@v3
1212
- name: Get latest release info of repository
1313
id: last_release
1414
uses: InsonusK/get-latest-release@v1.1.0

.github/workflows/pre-commit.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ jobs:
99
pre-commit:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v2
13-
- uses: actions/setup-python@v2
14-
- uses: pre-commit/action@v2.0.3
12+
- uses: actions/checkout@v3
13+
- uses: actions/setup-python@v5.2.0
14+
- uses: pre-commit/action@v3.0.1

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# ChangeLog
22

3+
## v0.2.1 - 2025-04-29
4+
5+
### Enhancements:
6+
7+
* feat(memory): add C++ global memory allocation
8+
39
## v0.2.0 - 2025-02-07
410

511
### Enhancements:

CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
set(SRC_DIR ./src)
2-
file(GLOB_RECURSE SRCS ${SRC_DIR}/*.c)
2+
file(GLOB_RECURSE SRCS_C ${SRC_DIR}/*.c)
3+
file(GLOB_RECURSE SRCS_CPP ${SRC_DIR}/*.cpp)
34

45
idf_component_register(
5-
SRCS ${SRCS}
6+
SRCS ${SRCS_C} ${SRCS_CPP}
67
INCLUDE_DIRS ${SRC_DIR}
78
)
89

910
target_compile_options(${COMPONENT_LIB}
1011
PUBLIC
1112
-Wno-missing-field-initializers
1213
PRIVATE
13-
$<$<COMPILE_LANGUAGE:CXX>:-std=gnu++17>
14+
$<$<COMPILE_LANGUAGE:CXX>:-std=gnu++20>
1415
)

Kconfig

Lines changed: 208 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,122 +1,214 @@
11
menu "ESP Library Utils Configurations"
22
config ESP_UTILS_CONF_FILE_SKIP
3-
bool "Unckeck this to use custom `esp_utils_conf.h`"
3+
bool "Enable to skip `esp_utils_conf.h`"
44
default y
5-
6-
menu "Check functions"
7-
depends on ESP_UTILS_CONF_FILE_SKIP
8-
choice ESP_UTILS_CONF_CHECK_HANDLE_METHOD
9-
prompt "Select handle method when check failed"
10-
default ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
11-
12-
config ESP_UTILS_CHECK_HANDLE_WITH_NONE
13-
bool "Do nothing"
14-
15-
config ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
16-
bool "Print error message"
17-
18-
config ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
19-
bool "Assert"
20-
endchoice
21-
22-
config ESP_UTILS_CONF_CHECK_HANDLE_METHOD
23-
int
24-
default 0 if ESP_UTILS_CHECK_HANDLE_WITH_NONE
25-
default 1 if ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
26-
default 2 if ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
27-
endmenu
28-
29-
menu "Log functions"
30-
depends on ESP_UTILS_CONF_FILE_SKIP
31-
32-
choice ESP_UTILS_CONF_LOG_LEVEL
33-
prompt "Select global log level"
34-
default ESP_UTILS_CONF_LOG_LEVEL_INFO
35-
36-
config ESP_UTILS_CONF_LOG_LEVEL_DEBUG
37-
bool "Debug"
5+
help
6+
If want to use `esp_utils_conf.h` to configure the library, uncheck this option. Otherwise, the configurations in sdkconfig will be used.
7+
8+
if ESP_UTILS_CONF_FILE_SKIP
9+
menu "Check functions"
10+
choice ESP_UTILS_CONF_CHECK_HANDLE_METHOD
11+
prompt "Select handle method when check failed"
12+
default ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
13+
14+
config ESP_UTILS_CHECK_HANDLE_WITH_NONE
15+
bool "Do nothing"
16+
17+
config ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
18+
bool "Print error message"
19+
20+
config ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
21+
bool "Assert"
22+
endchoice
23+
24+
config ESP_UTILS_CONF_CHECK_HANDLE_METHOD
25+
int
26+
default 0 if ESP_UTILS_CHECK_HANDLE_WITH_NONE
27+
default 1 if ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
28+
default 2 if ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
29+
endmenu
30+
31+
menu "Log functions"
32+
choice ESP_UTILS_CONF_LOG_LEVEL
33+
prompt "Select global log level"
34+
default ESP_UTILS_CONF_LOG_LEVEL_INFO
35+
36+
config ESP_UTILS_CONF_LOG_LEVEL_DEBUG
37+
bool "Debug"
38+
help
39+
Extra information which is not necessary for normal use (values, pointers, sizes, etc)
40+
41+
config ESP_UTILS_CONF_LOG_LEVEL_INFO
42+
bool "Info"
43+
help
44+
Information messages which describe the normal flow of events
45+
46+
config ESP_UTILS_CONF_LOG_LEVEL_WARNING
47+
bool "Warning"
48+
help
49+
Error conditions from which recovery measures have been taken
50+
51+
config ESP_UTILS_CONF_LOG_LEVEL_ERROR
52+
bool "Error"
53+
help
54+
Critical errors, software module cannot recover on its own
55+
56+
config ESP_UTILS_CONF_LOG_LEVEL_NONE
57+
bool "None"
58+
help
59+
No log output
60+
endchoice
61+
62+
config ESP_UTILS_CONF_LOG_LEVEL
63+
int
64+
default 0 if ESP_UTILS_CONF_LOG_LEVEL_DEBUG
65+
default 1 if ESP_UTILS_CONF_LOG_LEVEL_INFO
66+
default 2 if ESP_UTILS_CONF_LOG_LEVEL_WARNING
67+
default 3 if ESP_UTILS_CONF_LOG_LEVEL_ERROR
68+
default 4 if ESP_UTILS_CONF_LOG_LEVEL_NONE
69+
70+
config ESP_UTILS_CONF_ENABLE_LOG_TRACE
71+
bool "Enable trace function"
72+
depends on ESP_UTILS_CONF_LOG_LEVEL_DEBUG
73+
default n
3874
help
39-
Extra information which is not necessary for normal use (values, pointers, sizes, etc)
40-
41-
config ESP_UTILS_CONF_LOG_LEVEL_INFO
42-
bool "Info"
43-
help
44-
Information messages which describe the normal flow of events
45-
46-
config ESP_UTILS_CONF_LOG_LEVEL_WARNING
47-
bool "Warning"
48-
help
49-
Error conditions from which recovery measures have been taken
50-
51-
config ESP_UTILS_CONF_LOG_LEVEL_ERROR
52-
bool "Error"
53-
help
54-
Critical errors, software module cannot recover on its own
55-
56-
config ESP_UTILS_CONF_LOG_LEVEL_NONE
57-
bool "None"
75+
If enabled, the driver will print trace log messages when enter/exit functions, useful for debugging
76+
endmenu
77+
78+
menu "Memory functions"
79+
depends on ESP_UTILS_CONF_FILE_SKIP
80+
81+
menu "C/C++ general allocator"
82+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_DEFAULT_ENABLE
83+
bool "Default enable allocation"
84+
default y
85+
help
86+
If enabled, the driver will use general memory allocation by default, otherwise, the driver will use
87+
the standard `malloc` and `free` by default
88+
89+
choice ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CHOICE
90+
prompt "Select allocation type"
91+
default ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
92+
93+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
94+
bool "Standard (malloc, free)"
95+
96+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
97+
bool "ESP (`heap_caps_malloc`, `heap_caps_free`)"
98+
99+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
100+
bool "MicroPython (`mp_malloc`, `mp_free`)"
101+
102+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
103+
bool "Custom (`ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_NEW` and `ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_DELETE`)"
104+
endchoice
105+
106+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE
107+
int
108+
default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
109+
default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
110+
default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
111+
default 3 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
112+
113+
choice ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS
114+
prompt "ESP memory caps"
115+
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
116+
default ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_DEFAULT
117+
118+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_DEFAULT
119+
bool "Default"
120+
121+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_SRAM
122+
bool "Internal RAM (SRAM)"
123+
124+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_PSRAM
125+
bool "External RAM (PSRAM)"
126+
endchoice
127+
128+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS
129+
int
130+
default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_DEFAULT
131+
default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_SRAM
132+
default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_CAPS_PSRAM
133+
134+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_ALIGN
135+
int "ESP memory alignment (bytes)"
136+
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
137+
default 1
138+
range 1 1024
139+
140+
config ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_INCLUDE
141+
string "Custom memory header file"
142+
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
143+
default ""
144+
endmenu
145+
146+
menuconfig ESP_UTILS_CONF_MEM_ENABLE_CXX_GLOB_ALLOC
147+
bool "C++ global allocator"
148+
default n
58149
help
59-
No log output
60-
endchoice
61-
62-
config ESP_UTILS_CONF_LOG_LEVEL
63-
int
64-
default 0 if ESP_UTILS_CONF_LOG_LEVEL_DEBUG
65-
default 1 if ESP_UTILS_CONF_LOG_LEVEL_INFO
66-
default 2 if ESP_UTILS_CONF_LOG_LEVEL_WARNING
67-
default 3 if ESP_UTILS_CONF_LOG_LEVEL_ERROR
68-
default 4 if ESP_UTILS_CONF_LOG_LEVEL_NONE
69-
70-
config ESP_UTILS_CONF_ENABLE_LOG_TRACE
71-
bool "Enable trace function"
72-
depends on ESP_UTILS_CONF_LOG_LEVEL_DEBUG
73-
default n
74-
help
75-
If enabled, the driver will print trace log messages when enter/exit functions, useful for debugging
76-
endmenu
77-
78-
menu "Memory functions"
79-
depends on ESP_UTILS_CONF_FILE_SKIP
80-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_DEFAULT_ENABLE
81-
bool "Default enable general memory allocation"
82-
default y
83-
help
84-
If enabled, the driver will use general memory allocation by default, otherwise, the driver will use
85-
`malloc` and `free` by default
86-
87-
choice ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CHOICE
88-
prompt "Select general allocation type"
89-
default ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
90-
91-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
92-
bool "Standard library (malloc, free)"
93-
94-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
95-
bool "ESP (heap_caps_malloc, free)"
96-
97-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
98-
bool "MicroPython (mp_malloc, mp_free)"
99-
100-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
101-
bool "Custom (`ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_MALLOC` and `ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_FREE`)"
102-
endchoice
103-
104-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE
105-
int
106-
default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
107-
default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
108-
default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
109-
default 3 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
110-
111-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_ALIGN
112-
int "General esp memory alignment (bytes)"
113-
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
114-
default 1
115-
range 1 1024
116-
117-
config ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_INCLUDE
118-
string "General custom memory header file"
119-
depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
120-
default "stdlib.h"
121-
endmenu
150+
If enabled, the driver will override `new` and `delete` operators to use global memory allocator
151+
152+
if ESP_UTILS_CONF_MEM_ENABLE_CXX_GLOB_ALLOC
153+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_DEFAULT_ENABLE
154+
bool "Default enable allocation"
155+
default y
156+
help
157+
If enabled, the driver will use global memory allocation by default, otherwise, the driver will use
158+
the standard `new` and `delete` by default.
159+
160+
choice ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CHOICE
161+
prompt "Select allocation type"
162+
default ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
163+
164+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
165+
bool "ESP (`heap_caps_malloc`, `heap_caps_free`)"
166+
167+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_MICROPYTHON
168+
bool "MicroPython (`mp_malloc`, `mp_free`)"
169+
170+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CUSTOM
171+
bool "Custom (`ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_CUSTOM_NEW` and `ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_CUSTOM_DELETE`)"
172+
endchoice
173+
174+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE
175+
int
176+
default 1 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
177+
default 2 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_MICROPYTHON
178+
default 3 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CUSTOM
179+
180+
choice ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS
181+
prompt "ESP memory caps"
182+
depends on ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
183+
default ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_DEFAULT
184+
185+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_DEFAULT
186+
bool "Default"
187+
188+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_SRAM
189+
bool "Internal RAM (SRAM)"
190+
191+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_PSRAM
192+
bool "External RAM (PSRAM)"
193+
endchoice
194+
195+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS
196+
int
197+
default 0 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_DEFAULT
198+
default 1 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_SRAM
199+
default 2 if ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_CAPS_PSRAM
200+
201+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_ESP_ALIGN
202+
int "ESP memory alignment (bytes)"
203+
depends on ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_ESP
204+
default 1
205+
range 1 1024
206+
207+
config ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_CUSTOM_INCLUDE
208+
string "Custom memory header file"
209+
depends on ESP_UTILS_CONF_MEM_CXX_GLOB_ALLOC_TYPE_CUSTOM
210+
default ""
211+
endif # ESP_UTILS_CONF_MEM_ENABLE_CXX_GLOB_ALLOC
212+
endmenu
213+
endif # ESP_UTILS_CONF_FILE_SKIP
122214
endmenu

0 commit comments

Comments
 (0)