From ec40364ed4e66f6fa4b5122d6debbf1aab535fd7 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Tue, 24 Oct 2023 20:34:02 +0200 Subject: [PATCH 1/2] ports/all: Add custom mpconfigport file. --- src/Makefile | 4 +++- src/omv/ports/mimxrt/omv_mpconfigport.h | 7 +++++++ src/omv/ports/nrf/omv_mpconfigport.h | 7 +++++++ src/omv/ports/rp2/omv_mpconfigport.h | 7 +++++++ src/omv/ports/stm32/omv_mpconfigport.h | 7 +++++++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/omv/ports/mimxrt/omv_mpconfigport.h create mode 100644 src/omv/ports/nrf/omv_mpconfigport.h create mode 100644 src/omv/ports/rp2/omv_mpconfigport.h create mode 100644 src/omv/ports/stm32/omv_mpconfigport.h diff --git a/src/Makefile b/src/Makefile index b3796372d..70cf08d6a 100755 --- a/src/Makefile +++ b/src/Makefile @@ -66,6 +66,7 @@ DISPLAY_DIR=drivers/display LIBPDM_DIR=lib/libpdm TENSORFLOW_DIR=lib/libtf OMV_BOARD_CONFIG_DIR=$(TOP_DIR)/$(OMV_DIR)/boards/$(TARGET)/ +OMV_PORT_DIR=$(TOP_DIR)/$(OMV_DIR)/ports/$(PORT) MP_BOARD_CONFIG_DIR=$(TOP_DIR)/$(MICROPY_DIR)/ports/$(PORT)/boards/$(TARGET)/ OMV_LIB_DIR=$(TOP_DIR)/../scripts/libraries FROZEN_MANIFEST=$(OMV_BOARD_CONFIG_DIR)/manifest.py @@ -195,9 +196,10 @@ endif MPY_PENDSV_ENTRIES := $(shell echo $(MPY_PENDSV_ENTRIES) | tr -d '[:space:]') MPY_CFLAGS += -DMICROPY_BOARD_PENDSV_ENTRIES="$(MPY_PENDSV_ENTRIES)" +MPY_CFLAGS += -DMP_CONFIGFILE=\<$(OMV_PORT_DIR)/omv_mpconfigport.h\> # Include the port Makefile. -include $(OMV_DIR)/ports/$(PORT)/omv_portconfig.mk +include $(OMV_PORT_DIR)/omv_portconfig.mk clean: $(RM) -fr $(BUILD) diff --git a/src/omv/ports/mimxrt/omv_mpconfigport.h b/src/omv/ports/mimxrt/omv_mpconfigport.h new file mode 100644 index 000000000..23cf51657 --- /dev/null +++ b/src/omv/ports/mimxrt/omv_mpconfigport.h @@ -0,0 +1,7 @@ +#include + +#define MICROPY_NLR_RAISE_HOOK \ + do { \ + extern void fb_alloc_free_till_mark(); \ + fb_alloc_free_till_mark(); \ + } while (0); diff --git a/src/omv/ports/nrf/omv_mpconfigport.h b/src/omv/ports/nrf/omv_mpconfigport.h new file mode 100644 index 000000000..23cf51657 --- /dev/null +++ b/src/omv/ports/nrf/omv_mpconfigport.h @@ -0,0 +1,7 @@ +#include + +#define MICROPY_NLR_RAISE_HOOK \ + do { \ + extern void fb_alloc_free_till_mark(); \ + fb_alloc_free_till_mark(); \ + } while (0); diff --git a/src/omv/ports/rp2/omv_mpconfigport.h b/src/omv/ports/rp2/omv_mpconfigport.h new file mode 100644 index 000000000..23cf51657 --- /dev/null +++ b/src/omv/ports/rp2/omv_mpconfigport.h @@ -0,0 +1,7 @@ +#include + +#define MICROPY_NLR_RAISE_HOOK \ + do { \ + extern void fb_alloc_free_till_mark(); \ + fb_alloc_free_till_mark(); \ + } while (0); diff --git a/src/omv/ports/stm32/omv_mpconfigport.h b/src/omv/ports/stm32/omv_mpconfigport.h new file mode 100644 index 000000000..23cf51657 --- /dev/null +++ b/src/omv/ports/stm32/omv_mpconfigport.h @@ -0,0 +1,7 @@ +#include + +#define MICROPY_NLR_RAISE_HOOK \ + do { \ + extern void fb_alloc_free_till_mark(); \ + fb_alloc_free_till_mark(); \ + } while (0); From c4511338a2603029e5bc7b177234d0f59a63d228 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Tue, 24 Oct 2023 20:35:42 +0200 Subject: [PATCH 2/2] micropython: Add MICROPY_NLR_RAISE_HOOK. - This can be set from a custom mpconfigport.h file to call fb_alloc_free or any other needed cleanup before an exception. - The omvdummy stuff is no longer needed since a default empty hook is defined. --- src/micropython | 2 +- src/omv/alloc/fb_alloc.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/micropython b/src/micropython index 1f7bd3192..7f615a4a0 160000 --- a/src/micropython +++ b/src/micropython @@ -1 +1 @@ -Subproject commit 1f7bd319255924f2d17c40912c61b069503115e2 +Subproject commit 7f615a4a0f11e640dac20b8bc748385b4f5f67f3 diff --git a/src/omv/alloc/fb_alloc.c b/src/omv/alloc/fb_alloc.c index 4f6ee26c2..7d49878da 100644 --- a/src/omv/alloc/fb_alloc.c +++ b/src/omv/alloc/fb_alloc.c @@ -56,8 +56,8 @@ void fb_alloc_mark() { // Check if allocation overwrites the framebuffer pixels if (new_pointer < framebuffer_get_buffers_end()) { - nlr_raise_for_fb_alloc_mark(mp_obj_new_exception_msg(&mp_type_MemoryError, - MP_ERROR_TEXT("Out of fast frame buffer stack memory"))); + nlr_jump(MP_OBJ_TO_PTR(mp_obj_new_exception_msg(&mp_type_MemoryError, + MP_ERROR_TEXT("Out of fast frame buffer stack memory")))); } // fb_alloc does not allow regions which are a size of 0 to be alloced,