72 #define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc) 76 #define LWIP_MEMPOOL(name,num,size,desc) &memp_ ## name, 105 #if MEMP_OVERFLOW_CHECK 115 memp_overflow_check_element_overflow(
struct memp *p,
const struct memp_desc *desc)
119 #if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 121 for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) {
123 char errstr[128] =
"detected memp overflow in pool ";
124 strcat(errstr, desc->desc);
139 memp_overflow_check_element_underflow(
struct memp *p,
const struct memp_desc *desc)
143 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 144 m = (
u8_t*)p +
MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;
145 for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) {
147 char errstr[128] =
"detected memp underflow in pool ";
148 strcat(errstr, desc->desc);
161 memp_overflow_check_all(
void)
167 p = (
struct memp *)(
size_t)(memp_pools[i]->
base);
168 for (j = 0; j < memp_pools[i]->
num; ++j) {
169 memp_overflow_check_element_overflow(p, memp_pools[i]);
170 memp_overflow_check_element_underflow(p, memp_pools[i]);
171 p = (
struct memp*)(
size_t)((
u8_t*)p +
MEMP_SIZE + memp_pools[i]->size + MEMP_SANITY_REGION_AFTER_ALIGNED);
180 memp_overflow_init(
const struct memp_desc *desc)
186 p = (
struct memp *)(
size_t)(desc->
base);
187 for (i = 0; i < desc->
num; ++i) {
188 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 189 m = (
u8_t*)p +
MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;
190 memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED);
192 #if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 194 memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED);
211 for (i = 0; i < desc->
num; ++i) {
216 + MEMP_SANITY_REGION_AFTER_ALIGNED
221 #if MEMP_OVERFLOW_CHECK 222 memp_overflow_init(desc);
248 #if MEMP_OVERFLOW_CHECK 250 memp_overflow_check_all();
255 #if !MEMP_OVERFLOW_CHECK 258 memp_malloc_pool_fn(
const struct memp_desc *desc,
const char* file,
const int line)
268 #if MEMP_OVERFLOW_CHECK == 1 269 memp_overflow_check_element_overflow(memp, desc);
270 memp_overflow_check_element_underflow(memp, desc);
275 #if MEMP_OVERFLOW_CHECK 302 #if !MEMP_OVERFLOW_CHECK 305 memp_malloc_fn(
memp_t type,
const char* file,
const int line)
315 #if MEMP_OVERFLOW_CHECK >= 2 316 memp_overflow_check_all();
319 #if !MEMP_OVERFLOW_CHECK 322 memp = memp_malloc_pool_fn(memp_pools[type], file, line);
341 #ifdef LWIP_HOOK_MEMP_AVAILABLE 342 do_memp_free_pool(
const struct memp_desc* desc,
void *
mem,
struct memp **old_first)
344 do_memp_free_pool(
const struct memp_desc* desc,
void *mem)
357 #if MEMP_OVERFLOW_CHECK == 1 358 memp_overflow_check_element_overflow(memp, desc);
359 memp_overflow_check_element_underflow(memp, desc);
364 #ifdef LWIP_HOOK_MEMP_AVAILABLE 366 *old_first = *desc->
tab;
371 #if MEMP_SANITY_CHECK 381 if ((desc ==
NULL) || (mem ==
NULL)) {
385 #ifdef LWIP_HOOK_MEMP_AVAILABLE 386 do_memp_free_pool(desc, mem,
NULL);
388 do_memp_free_pool(desc, mem);
401 #ifdef LWIP_HOOK_MEMP_AVAILABLE 402 struct memp *old_first;
410 #if MEMP_OVERFLOW_CHECK >= 2 411 memp_overflow_check_all();
416 #ifdef LWIP_HOOK_MEMP_AVAILABLE 417 do_memp_free_pool(memp_pools[type], mem, &old_first);
419 do_memp_free_pool(memp_pools[type], mem);
424 #ifdef LWIP_HOOK_MEMP_AVAILABLE 425 if (old_first ==
NULL) {
426 LWIP_HOOK_MEMP_AVAILABLE(type);
#define MEMP_STATS_AVAIL(x, i, y)
#define LWIP_DBG_LEVEL_SERIOUS
void memp_free_pool(const struct memp_desc *desc, void *mem)
#define MEMP_STATS_GET(x, i)
void memp_free(memp_t type, void *mem)
#define SYS_ARCH_DECL_PROTECT(lev)
const struct memp_desc * memp_pools[MEMP_MAX]
#define MEMP_OVERFLOW_CHECK
void memp_init_pool(const struct memp_desc *desc)
#define LWIP_ASSERT(message, assertion)
#define SYS_ARCH_PROTECT(lev)
void * memp_malloc_pool(const struct memp_desc *desc)
#define LWIP_MEM_ALIGN(addr)
#define SYS_ARCH_UNPROTECT(lev)
#define LWIP_ERROR(message, expression, handler)
#define MEMP_STATS_DEC(x, i)
#define MEMP_STATS_INC(x, i)
void * memp_malloc(memp_t type)
#define LWIP_DEBUGF(debug, message)