Precise data bus error when use Edge Impulse wrapper

I am trying to use Edge Impulse ML models on my custom board. I have built my model on EI and downloaded it locally. I followed the sample wrapper code to use my own model but constanly get this error:

[00:00:02.771,697] <err> os: ***** BUS FAULT *****
[00:00:02.771,697] <err> os:   Precise data bus error
[00:00:02.771,697] <err> os:   BFAR Address: 0x2002065c
[00:00:02.771,728] <err> os: r0/a1:  0x2001fc08  r1/a2:  0x00000149  r2/a3:  0x0000000f
[00:00:02.771,759] <err> os: r3/a4:  0x00000013 r12/ip:  0x20020650 r14/lr:  0x00048553
[00:00:02.771,759] <err> os:  xpsr:  0x21000200
[00:00:02.771,759] <err> os: s[ 0]:  0xaaaaaaaa  s[ 1]:  0x00000149  s[ 2]:  0x00000008  s[ 3]:  0x00000002
[00:00:02.771,789] <err> os: s[ 4]:  0x2001fc08  s[ 5]:  0x2001fc08  s[ 6]:  0x00000000  s[ 7]:  0x0004859f
[00:00:02.771,789] <err> os: s[ 8]:  0x00000008  s[ 9]:  0x00000008  s[10]:  0x2001fc08  s[11]:  0x000486c5
[00:00:02.771,850] <err> os: s[12]:  0x00000008  s[13]:  0x2001181c  s[14]:  0x20007938  s[15]:  0x00000000
[00:00:02.771,850] <err> os: fpscr:  0x00000000
[00:00:02.771,850] <err> os: Faulting instruction address (r15/pc): 0x00048150
[00:00:02.771,881] <err> os: >>> ZEPHYR FATAL ERROR 25: Unknown error on CPU 0
[00:00:02.771,911] <err> os: Current thread: 0x20007a08 (edge_impulse_thread)
[00:00:03.226,226] <err> os: Halting system
The model can be initialised without any issue, only when I call: 

int err = ei_wrapper_add_data(ei_frame_data, frame_size); this specific function, the system will crash. 
 
I suspect it is a stack overflow issue. So far I have tried to: (1) Increase edge impulse stack size to 8192 and other threads' stack size geneously. (2) Use addr2line and arm-none-eabi-objdump -d -S build/Firmware/zephyr/zephyr.elf > disassembly_3.txt to examine the specific memory address. This returns: /opt/nordic/ncs/v3.0.2/zephyr/lib/heap/heap.h:114 which points to this function:
static inline chunkid_t chunk_field(struct z_heap *h, chunkid_t c,
				    enum chunk_fields f)
{
	chunk_unit_t *buf = chunk_buf(h);
	void *cmem = &buf[c];

	if (big_heap(h)) {
		return ((uint32_t *)cmem)[f];
	} else {
		return ((uint16_t *)cmem)[f];
	}
}
and 
48150:	f8dc 300c 	ldr.w	r3, [ip, #12]

	CHECK(!chunk_used(h, c));
	CHECK(b->next != 0);
	CHECK(h->avail_buckets & BIT(bidx));
.
I attach my prj.conf here:
# Enable GPIO
CONFIG_GPIO=y
# Enable I2C
CONFIG_I2C=y
# Enable SPI
CONFIG_SPI=y

# Enable log and use it via Jlink RTT rather than CDC ACM 
CONFIG_LOG=y
CONFIG_USE_SEGGER_RTT=y
CONFIG_LOG_BACKEND_RTT=y    
CONFIG_LOG_BACKEND_UART=n
CONFIG_RTT_CONSOLE=n    
CONFIG_STDOUT_CONSOLE=n 
CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096  
CONFIG_LOG_BUFFER_SIZE=8192
CONFIG_UART_CONSOLE=n
CONFIG_CONSOLE=n

# Enable Bluetooth LE
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="BORUS"
CONFIG_BT_BROADCASTER=y
CONFIG_BT_OBSERVER=y
CONFIG_BT_FILTER_ACCEPT_LIST=y
# Extended BLE 
CONFIG_BT_EXT_ADV=y
CONFIG_BT_EXT_ADV_MAX_ADV_SET=2

# Enale floating point unit for float point calculation 
CONFIG_FPU=y
CONFIG_CBPRINTF_FP_SUPPORT=y
CONFIG_FPU_SHARING=y

# Enable debugging 
CONFIG_DEBUG_THREAD_INFO=y
CONFIG_DEBUG_OPTIMIZATIONS=y

# Enable multithread
CONFIG_MULTITHREADING=y

# Enable battery voltage monitoring
CONFIG_SENSOR=y
CONFIG_PWM=n
CONFIG_ADC=y
CONFIG_VOLTAGE_DIVIDER=y
CONFIG_NRFX_SAADC=y

# Configure USB device
CONFIG_USB_DEVICE_STACK=y
CONFIG_USB_DEVICE_PRODUCT="BORUS"
CONFIG_USB_DEVICE_PID=0x0001
CONFIG_USB_DEVICE_VID=0x0001
CONFIG_USB_DRIVER_LOG_LEVEL_ERR=y
CONFIG_USB_DEVICE_LOG_LEVEL_ERR=y
CONFIG_SERIAL=n
CONFIG_USB_CDC_ACM=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_UART_LINE_CTRL=n
CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM=n
CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n

# Configure USB device to appear as DFU class
# Configure DFU autoupdate and reset
CONFIG_USB_DFU_CLASS=y
CONFIG_USB_REQUEST_BUFFER_SIZE=128
CONFIG_USB_DFU_ENABLE_UPLOAD=y
CONFIG_USB_DFU_PERMANENT_DOWNLOAD=y
CONFIG_USB_DFU_REBOOT=y
CONFIG_IMG_MANAGER=y
CONFIG_STREAM_FLASH=y
CONFIG_BOOTLOADER_MCUBOOT=y

# Configure file system 
CONFIG_FLASH_MAP=y
CONFIG_FLASH=y
CONFIG_FILE_SYSTEM=y
CONFIG_FILE_SYSTEM_LITTLEFS=n
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_FS_FATFS_LFN=y
CONFIG_FS_FATFS_EXFAT=y
CONFIG_FS_LOG_LEVEL_INF=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NORDIC_QSPI_NOR=y
CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096

# Configure SPI RAM buffer size
CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=128

# Configure mass storage
CONFIG_USB_MASS_STORAGE=y
CONFIG_DISK_ACCESS=y
CONFIG_USB_MASS_STORAGE_LOG_LEVEL_ERR=y
CONFIG_DISK_LOG_LEVEL_DBG=y
CONFIG_DISK_DRIVERS=y
CONFIG_DISK_DRIVER_SDMMC=y
CONFIG_DISK_DRIVER_FLASH=y
CONFIG_MASS_STORAGE_DISK_NAME="SD"

# Configure BLE encryption
CONFIG_NRF_SECURITY=y
CONFIG_MBEDTLS_PSA_CRYPTO_C=y
CONFIG_PSA_CRYPTO_DRIVER_CC3XX=y
CONFIG_PSA_CRYPTO_DRIVER_OBERON=n
CONFIG_PSA_WANT_KEY_TYPE_AES=y
CONFIG_PSA_WANT_ALG_CTR=y
CONFIG_HEAP_MEM_POOL_SIZE=4096
CONFIG_MBEDTLS_ENABLE_HEAP=y
CONFIG_MBEDTLS_HEAP_SIZE=8192
CONFIG_TEST_RANDOM_GENERATOR=y

# Configure Settings subsystem
CONFIG_SETTINGS=y
CONFIG_SETTINGS_RUNTIME=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y

# Configure Watchdog
CONFIG_WATCHDOG=y
CONFIG_WDT_DISABLE_AT_BOOT=n

# Enable State Machine Framework
CONFIG_SMF=y

# Enable DSP
CONFIG_CMSIS_DSP=y
CONFIG_CMSIS_DSP_FILTERING=y
CONFIG_CMSIS_DSP_TRANSFORM=y
CONFIG_CMSIS_DSP_STATISTICS=y
CONFIG_CMSIS_DSP_FASTMATH=y
CONFIG_REQUIRES_FULL_LIBC=y
CONFIG_RING_BUFFER=y

# Power management
CONFIG_PM_DEVICE=y
CONFIG_RAM_POWER_DOWN_LIBRARY=y
CONFIG_POWEROFF=y

CONFIG_BMI270=y
CONFIG_BMI270_TRIGGER_GLOBAL_THREAD=y
CONFIG_BMP388=y
CONFIG_BMP388_TRIGGER_GLOBAL_THREAD=y
CONFIG_BMP388_ODR_RUNTIME=y
CONFIG_BMP388_OSR_RUNTIME=y 

# ------------------- Edge ML -------------------
CONFIG_CPP=y                
CONFIG_STD_CPP11=y
CONFIG_FP16=n
CONFIG_EDGE_IMPULSE=y
CONFIG_EDGE_IMPULSE_URI="/Users/gw23523/Downloads/test-cpp-mcu-v5.zip"
CONFIG_EI_WRAPPER=y


# ------------------- Turn below ON for Optimisation -------------------
# Stack sizes (This needs to be optimised using the thread analyzer below)
CONFIG_MAIN_STACK_SIZE=2048
CONFIG_ISR_STACK_SIZE=2048
CONFIG_IDLE_STACK_SIZE=512
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
CONFIG_EI_WRAPPER_THREAD_STACK_SIZE=8192
CONFIG_MASS_STORAGE_STACK_SIZE=1024

# Thread analyser for debug purposes
CONFIG_THREAD_ANALYZER=y
CONFIG_THREAD_ANALYZER_USE_LOG=y
CONFIG_THREAD_ANALYZER_AUTO=y
CONFIG_THREAD_ANALYZER_AUTO_INTERVAL=5
CONFIG_THREAD_NAME=y
# ----------------------------------------------------------------------
  I am using NCS 3.0.2, nrf5340.
I also observed from this post a very similar precise bus error where frequent data IO is presented: https://devzone.nordicsemi.com/f/nordic-q-a/124449/when-pd-continuously-sends-libosdp-events-w-o-interruption-reader-will-get-bus-fault/550752, in which CPP kconfigs are also enabled. Could this be an issue?
Related