summaryrefslogtreecommitdiffstatshomepage
path: root/esp8266/modesp.c
diff options
context:
space:
mode:
Diffstat (limited to 'esp8266/modesp.c')
-rw-r--r--esp8266/modesp.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/esp8266/modesp.c b/esp8266/modesp.c
index a20769abc4..4403dfde4b 100644
--- a/esp8266/modesp.c
+++ b/esp8266/modesp.c
@@ -711,6 +711,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp_esf_free_bufs_obj, esp_esf_free_bufs);
// esp.set_native_code_location() function; see below. If flash is selected
// then it is erased as needed.
+#include "gccollect.h"
+
#define IRAM1_END (0x40108000)
#define FLASH_START (0x40200000)
#define FLASH_END (0x40300000)
@@ -734,6 +736,16 @@ void esp_native_code_init(void) {
esp_native_code_erased = 0;
}
+void esp_native_code_gc_collect(void) {
+ void *src;
+ if (esp_native_code_location == ESP_NATIVE_CODE_IRAM1) {
+ src = (void*)esp_native_code_start;
+ } else {
+ src = (void*)(FLASH_START + esp_native_code_start);
+ }
+ gc_collect_root(src, (esp_native_code_end - esp_native_code_start) / sizeof(uint32_t));
+}
+
void *esp_native_code_commit(void *buf, size_t len) {
//printf("COMMIT(buf=%p, len=%u, start=%08x, cur=%08x, end=%08x, erased=%08x)\n", buf, len, esp_native_code_start, esp_native_code_cur, esp_native_code_end, esp_native_code_erased);