Skip to content

Commit 814ad18

Browse files
authored
Merge pull request #270 from iabdalkader/add_debug_overlay
misc: Optimize flash and memory usage.
2 parents 99d5270 + 41e6e93 commit 814ad18

File tree

9 files changed

+99
-22
lines changed

9 files changed

+99
-22
lines changed

extra/build.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ else
5151
args="$*"
5252
fi
5353

54+
# Check for debug flag and append
55+
if [ x$2 == x"--debug" ]; then
56+
args="$args -- -DEXTRA_CONF_FILE=../extra/debug.conf"
57+
fi
58+
5459
echo
5560
echo "Build target: $target $args"
5661

extra/debug.conf

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
# Debug configuration for Arduino Core Zephyr
3+
4+
# Enable debug mode
5+
CONFIG_DEBUG=y
6+
7+
# Enable assertions
8+
CONFIG_ASSERT=y
9+
#CONFIG_ASSERT_VERBOSE=y
10+
11+
# Enable stack overflow detection
12+
CONFIG_STACK_SENTINEL=y
13+
CONFIG_STACK_CANARIES=y
14+
15+
# Enable thread monitoring and debugging
16+
CONFIG_THREAD_MONITOR=y
17+
CONFIG_THREAD_NAME=y
18+
CONFIG_DEBUG_THREAD_INFO=y
19+
20+
# Disable compiler optimizations
21+
#CONFIG_DEBUG_OPTIMIZATIONS=y
22+
23+
# Enable and configure the shell
24+
CONFIG_SHELL=y
25+
#CONFIG_NET_SHELL=y
26+
#CONFIG_NET_L2_WIFI_SHELL=y
27+
CONFIG_SHELL_STACK_SIZE=8192
28+
29+
# Enable runtime statistics
30+
CONFIG_SYS_HEAP_RUNTIME_STATS=y
31+
CONFIG_THREAD_RUNTIME_STATS=y

loader/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,20 @@ project(app LANGUAGES C CXX)
1616

1717
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/blobs)
1818

19+
# Memory region relocation based on Kconfig
20+
# Relocate LLEXT heap if region specified
21+
if(NOT "${CONFIG_LLEXT_HEAP_REGION}" STREQUAL "")
22+
zephyr_code_relocate(FILES ${ZEPHYR_BASE}/subsys/llext/llext_mem.c
23+
LOCATION ${CONFIG_LLEXT_HEAP_REGION}_BSS_NOINIT)
24+
endif()
25+
26+
# Relocate main stack if region specified
27+
if(NOT "${CONFIG_MAIN_STACK_REGION}" STREQUAL "")
28+
zephyr_code_relocate(FILES ${ZEPHYR_BASE}/kernel/init.c
29+
LOCATION ${CONFIG_MAIN_STACK_REGION}_BSS_NOINIT)
30+
endif()
31+
32+
1933
# for USB device stack NEXT
2034
target_sources_ifdef(CONFIG_USB_DEVICE_STACK_NEXT app PRIVATE
2135
${CMAKE_CURRENT_LIST_DIR}/../cores/arduino/usb_device_descriptor.c

loader/Kconfig

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#
2+
# Copyright (c) 2025 Arduino
3+
#
4+
# SPDX-License-Identifier: Apache-2.0
5+
#
6+
7+
source "Kconfig.zephyr"
8+
9+
config LLEXT_HEAP_REGION
10+
string "LLEXT heap memory region"
11+
depends on CODE_DATA_RELOCATION
12+
help
13+
Specify the memory region for LLEXT heap.
14+
15+
config MAIN_STACK_REGION
16+
string "Main stack memory region"
17+
depends on CODE_DATA_RELOCATION
18+
help
19+
Specify the memory region for main stack.

loader/fixups.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#include <cmsis_core.h>
22
#include <zephyr/init.h>
33

4+
#ifndef CONFIG_CPP
5+
void __cxa_pure_virtual() {
6+
while (1)
7+
;
8+
}
9+
#endif
10+
411
int disable_mpu_rasr_xn(void) {
512
uint32_t index;
613
/* Kept the max index as 8(irrespective of soc) because the sram

loader/llext_exports.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,14 @@ EXPORT_SYMBOL(usb_enable);
8282
EXPORT_SYMBOL(usb_disable);
8383
#endif
8484

85+
#if CONFIG_LOG
8586
EXPORT_SYMBOL(z_log_msg_runtime_vcreate);
87+
FORCE_EXPORT_SYM(log_const_sketch)
88+
#endif
8689

90+
#if defined(CONFIG_LOG_RUNTIME_FILTERING)
8791
FORCE_EXPORT_SYM(log_dynamic_sketch)
92+
#endif
8893

8994
#if defined(CONFIG_NETWORKING)
9095
FORCE_EXPORT_SYM(net_if_foreach);

variants/arduino_giga_r1_stm32h747xx_m7/arduino_giga_r1_stm32h747xx_m7.conf

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ CONFIG_SHELL_STACK_SIZE=32768
1616
CONFIG_MAIN_STACK_SIZE=32768
1717
CONFIG_LLEXT_HEAP_SIZE=128
1818

19-
CONFIG_FPU=y
19+
CONFIG_CPP=n
20+
CONFIG_SHELL=n
2021

22+
CONFIG_FPU=y
2123
CONFIG_ADC=y
2224
CONFIG_DAC=y
2325
CONFIG_PWM=y
@@ -39,13 +41,12 @@ CONFIG_MBEDTLS=y
3941
CONFIG_MBEDTLS_BUILTIN=y
4042
CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y
4143
CONFIG_MBEDTLS_ENABLE_HEAP=y
42-
CONFIG_MBEDTLS_HEAP_SIZE=60000
44+
CONFIG_MBEDTLS_HEAP_SIZE=80000
4345
CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=7168
4446
CONFIG_MBEDTLS_HASH_ALL_ENABLED=y
4547
CONFIG_MBEDTLS_CMAC=y
4648

4749
CONFIG_VIDEO=y
48-
CONFIG_VIDEO_LOG_LEVEL_DBG=y
4950
CONFIG_VIDEO_STM32_DCMI=y
5051
CONFIG_VIDEO_BUFFER_POOL_NUM_MAX=3
5152
CONFIG_VIDEO_BUFFER_POOL_SZ_MAX=614400
@@ -134,7 +135,4 @@ CONFIG_DNS_SERVER1="8.8.8.8"
134135
CONFIG_NET_CONFIG_AUTO_INIT=n
135136
CONFIG_NET_CONNECTION_MANAGER=y
136137
#CONFIG_WIFI_NM_MAX_MANAGED_INTERFACES=2
137-
138-
CONFIG_NET_SHELL=y
139138
CONFIG_NET_L2_ETHERNET_MGMT=y
140-
CONFIG_NET_L2_WIFI_SHELL=y

variants/arduino_portenta_c33_r7fa6m5bh3cfc/arduino_portenta_c33_r7fa6m5bh3cfc.conf

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ CONFIG_USBD_LOG_LEVEL_ERR=y
1818
CONFIG_LLEXT_STORAGE_WRITABLE=n
1919

2020
CONFIG_FPU=y
21-
2221
CONFIG_USERSPACE=n
2322
CONFIG_ARM_MPU=n
2423

25-
CONFIG_SHELL_STACK_SIZE=8192
24+
CONFIG_CPP=n
25+
CONFIG_SHELL=n
26+
2627
CONFIG_MAIN_STACK_SIZE=32768
2728
CONFIG_LLEXT_HEAP_SIZE=128
2829
CONFIG_HEAP_MEM_POOL_SIZE=32768
@@ -34,8 +35,6 @@ CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192
3435
CONFIG_ADC=y
3536
CONFIG_PWM=y
3637

37-
CONFIG_NET_CORE_LOG_LEVEL_DBG=y
38-
3938
CONFIG_NETWORKING=y
4039
CONFIG_NET_IPV6=n
4140
CONFIG_NET_IPV4=y
@@ -74,7 +73,7 @@ CONFIG_MBEDTLS=y
7473
CONFIG_MBEDTLS_BUILTIN=y
7574
CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y
7675
CONFIG_MBEDTLS_ENABLE_HEAP=y
77-
CONFIG_MBEDTLS_HEAP_SIZE=60000
76+
CONFIG_MBEDTLS_HEAP_SIZE=80000
7877
CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=7168
7978
CONFIG_MBEDTLS_HASH_ALL_ENABLED=y
8079
CONFIG_MBEDTLS_CMAC=y
@@ -85,7 +84,6 @@ CONFIG_NANOPB=y
8584
CONFIG_NET_CONFIG_AUTO_INIT=n
8685
CONFIG_NET_CONNECTION_MANAGER=y
8786
CONFIG_WIFI_NM_MAX_MANAGED_INTERFACES=2
88-
CONFIG_NET_L2_WIFI_SHELL=y
8987
CONFIG_NET_MGMT_EVENT_QUEUE_SIZE=32
9088

9189
CONFIG_NET_IF_MAX_IPV4_COUNT=3

variants/arduino_portenta_h7_stm32h747xx_m7/arduino_portenta_h7_stm32h747xx_m7.conf

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ CONFIG_UART_LINE_CTRL=y
1010
CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT=y
1111

1212
CONFIG_LLEXT_STORAGE_WRITABLE=n
13-
1413
CONFIG_SHARED_MULTI_HEAP=y
15-
CONFIG_HEAP_MEM_POOL_SIZE=65536
14+
CONFIG_HEAP_MEM_POOL_SIZE=32768
15+
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=-1
16+
17+
CONFIG_CPP=n
18+
CONFIG_SHELL=n
1619

1720
CONFIG_FPU=y
1821
CONFIG_ICACHE=y
@@ -23,10 +26,13 @@ CONFIG_USERSPACE=n
2326
CONFIG_ARM_MPU=y
2427
CONFIG_MAX_THREAD_BYTES=4
2528

26-
CONFIG_SHELL_STACK_SIZE=32768
2729
CONFIG_MAIN_STACK_SIZE=32768
2830
CONFIG_LLEXT_HEAP_SIZE=128
2931

32+
CONFIG_CODE_DATA_RELOCATION=y
33+
CONFIG_MAIN_STACK_REGION="DTCM"
34+
CONFIG_LLEXT_HEAP_REGION="SRAM2"
35+
3036
CONFIG_ADC=y
3137
CONFIG_PWM=y
3238
CONFIG_DMA=y
@@ -40,13 +46,10 @@ CONFIG_SDHC_INIT_PRIORITY=75
4046
CONFIG_SDIO_STACK=y
4147
CONFIG_CYW4343W=y
4248
CONFIG_WIFI=y
43-
CONFIG_NET_L2_WIFI_SHELL=y
4449

4550
CONFIG_AIROC_WIFI_CUSTOM=y
4651
CONFIG_STM32_MEMMAP=y
4752

48-
CONFIG_NET_CORE_LOG_LEVEL_DBG=y
49-
5053
CONFIG_NETWORKING=y
5154
CONFIG_NET_IPV6=n
5255
CONFIG_NET_IPV4=y
@@ -58,8 +61,6 @@ CONFIG_DNS_RESOLVER=y
5861
CONFIG_DNS_SERVER_IP_ADDRESSES=y
5962
CONFIG_DNS_SERVER1="8.8.8.8"
6063

61-
CONFIG_INIT_STACKS=y
62-
6364
CONFIG_NET_SOCKETS=y
6465
CONFIG_NET_SOCKETS_NET_MGMT=y
6566
CONFIG_NET_SOCKETS_SOCKOPT_TLS=y
@@ -82,13 +83,12 @@ CONFIG_MBEDTLS=y
8283
CONFIG_MBEDTLS_BUILTIN=y
8384
CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y
8485
CONFIG_MBEDTLS_ENABLE_HEAP=y
85-
CONFIG_MBEDTLS_HEAP_SIZE=60000
86+
CONFIG_MBEDTLS_HEAP_SIZE=80000
8687
CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=7168
8788
CONFIG_MBEDTLS_HASH_ALL_ENABLED=y
8889
CONFIG_MBEDTLS_CMAC=y
8990

9091
CONFIG_VIDEO=y
91-
CONFIG_VIDEO_LOG_LEVEL_DBG=y
9292
CONFIG_VIDEO_STM32_DCMI=y
9393
CONFIG_VIDEO_BUFFER_POOL_NUM_MAX=3
9494
CONFIG_VIDEO_BUFFER_POOL_SZ_MAX=614400

0 commit comments

Comments
 (0)