|
- // External memory allocation functions. Attempt to use external memory,
- // but automatically fall back to internal RAM if external RAM can't be used.
-
- #include <stdlib.h>
- #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);
- }
-
|