// External memory allocation functions. Attempt to use external memory, // but automatically fall back to internal RAM if external RAM can't be used. #include #include "smalloc.h" #include "wiring.h" #if defined(ARDUINO_TEENSY41) // Teensy 4.1 external RAM address range is 0x70000000 to 0x7FFFFFFF #define HAS_EXTRAM #define IS_EXTMEM(addr) (((uint32_t)ptr >> 28) == 7) #endif void *extmem_malloc(size_t size) { #ifdef HAS_EXTRAM void *ptr = sm_malloc_pool(&extmem_smalloc_pool, size); if (ptr) return ptr; #endif return malloc(size); } void extmem_free(void *ptr) { #ifdef HAS_EXTRAM if (IS_EXTMEM(ptr)) { sm_free_pool(&extmem_smalloc_pool, ptr); return; } #endif free(ptr); } void *extmem_calloc(size_t nmemb, size_t size) { return extmem_malloc(nmemb * size); } void *extmem_realloc(void *ptr, size_t size) { #ifdef HAS_EXTRAM if (IS_EXTMEM(ptr)) { return sm_realloc_pool(&extmem_smalloc_pool, ptr, size); } #endif return realloc(ptr, size); }