68 #if MEMP_OVERFLOW_CHECK 74 #if MEMP_OVERFLOW_CHECK 83 #ifndef MEMP_SANITY_REGION_BEFORE 84 #define MEMP_SANITY_REGION_BEFORE 16 86 #if MEMP_SANITY_REGION_BEFORE > 0 87 #define MEMP_SANITY_REGION_BEFORE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE) 89 #define MEMP_SANITY_REGION_BEFORE_ALIGNED 0 91 #ifndef MEMP_SANITY_REGION_AFTER 92 #define MEMP_SANITY_REGION_AFTER 16 94 #if MEMP_SANITY_REGION_AFTER > 0 95 #define MEMP_SANITY_REGION_AFTER_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER) 97 #define MEMP_SANITY_REGION_AFTER_ALIGNED 0 101 #define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED) 102 #define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED) 111 #define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) 121 #define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) 126 #if !MEM_USE_POOLS && !MEMP_MEM_MALLOC 130 #define LWIP_MEMPOOL(name,num,size,desc,attr) LWIP_MEM_ALIGN_SIZE(size), 140 #define LWIP_MEMPOOL(name,num,size,desc,attr) (num), 148 #define LWIP_MEMPOOL(name,num,size,desc,attr) (desc), 153 #if MEMP_SEPARATE_POOLS 160 #define LWIP_MEMPOOL(name,num,size,desc,attr) u8_t memp_memory_ ## name ## _base \ 161 [((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))] attr; 165 static u8_t *
const memp_bases[] = {
166 #define LWIP_MEMPOOL(name,num,size,desc,attr) memp_memory_ ## name ## _base, 174 #define LWIP_MEMPOOL(name,num,size,desc, attr) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) 180 #if MEMP_SANITY_CHECK 204 #if MEMP_OVERFLOW_CHECK 205 #if defined(LWIP_DEBUG) && MEMP_STATS 206 static const char * memp_overflow_names[] = {
207 #define LWIP_MEMPOOL(name,num,size,desc,attr) "/"desc, 220 memp_overflow_check_element_overflow(
struct memp *p,
u16_t memp_type)
224 #if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 226 for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) {
228 char errstr[128] =
"detected memp overflow in pool ";
230 if(memp_type >= 10) {
231 digit[0] =
'0' + (memp_type/10);
234 digit[0] =
'0' + (memp_type%10);
236 #if defined(LWIP_DEBUG) && MEMP_STATS 237 strcat(errstr, memp_overflow_names[memp_type]);
253 memp_overflow_check_element_underflow(
struct memp *p,
u16_t memp_type)
257 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 258 m = (
u8_t*)p +
MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;
259 for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) {
261 char errstr[128] =
"detected memp underflow in pool ";
263 if(memp_type >= 10) {
264 digit[0] =
'0' + (memp_type/10);
267 digit[0] =
'0' + (memp_type%10);
269 #if defined(LWIP_DEBUG) && MEMP_STATS 270 strcat(errstr, memp_overflow_names[memp_type]);
284 memp_overflow_check_all(
void)
293 memp_overflow_check_element_overflow(p, i);
294 p = (
struct memp*)((
u8_t*)p +
MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED);
301 memp_overflow_check_element_underflow(p, i);
302 p = (
struct memp*)((
u8_t*)p +
MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED);
311 memp_overflow_init(
void)
321 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 322 m = (
u8_t*)p +
MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;
323 os_memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED);
325 #if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 327 os_memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED);
329 p = (
struct memp*)((
u8_t*)p +
MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED);
353 #if !MEMP_SEPARATE_POOLS 359 #if MEMP_SEPARATE_POOLS 360 memp = (
struct memp*)memp_bases[i];
364 memp->
next = (
struct memp *)memp_tab[i];
366 memp = (
struct memp *)(
void *)((
u8_t *)memp +
MEMP_SIZE + memp_sizes[i]
368 + MEMP_SANITY_REGION_AFTER_ALIGNED
373 #if MEMP_OVERFLOW_CHECK 374 memp_overflow_init();
376 memp_overflow_check_all();
392 #if !MEMP_OVERFLOW_CHECK 395 memp_malloc_fn(
memp_t type,
const char* file,
const int line)
404 #if MEMP_OVERFLOW_CHECK >= 2 405 memp_overflow_check_all();
408 memp = memp_tab[type];
411 memp_tab[type] = memp->
next;
412 #if MEMP_OVERFLOW_CHECK 452 #if MEMP_OVERFLOW_CHECK 453 #if MEMP_OVERFLOW_CHECK >= 2 454 memp_overflow_check_all();
456 memp_overflow_check_element_overflow(memp, type);
457 memp_overflow_check_element_underflow(memp, type);
463 memp->
next = memp_tab[type];
464 memp_tab[type] = memp;
466 #if MEMP_SANITY_CHECK 477 printf(
"sizeof raw_pcb %u, memp_s1 %u, %s\n",
sizeof(
struct raw_pcb), memp_sizes[0],
memp_desc[0]);
478 printf(
"sizeof udp_pcb %u, memp_s2 %u, %s\n",
sizeof(
struct udp_pcb), memp_sizes[1],
memp_desc[1]);
479 printf(
"sizeof tcp_pcb %u, memp_s3 %u, %s\n",
sizeof(
struct tcp_pcb), memp_sizes[2],
memp_desc[2]);
480 printf(
"sizeof tcp_pcb_listen %u, memp_s4 %u, %s\n",
sizeof(
struct tcp_pcb_listen), memp_sizes[3],
memp_desc[3]);
481 printf(
"sizeof tcp_seg %u, memp_s5 %u, %s\n",
sizeof(
struct tcp_seg), memp_sizes[4],
memp_desc[4]);
483 printf(
"sizeof pbuf %u, memp_s7 %u, %s\n",
sizeof(
struct pbuf), memp_sizes[6],
memp_desc[6]);
#define MEMP_STATS_AVAIL(x, i, y)
static u8_t memp_memory[MEM_ALIGNMENT - 1 #define LWIP_MEMPOOL(name, num, size, desc, attr)]
#define ICACHE_FLASH_ATTR
static const u16_t memp_num[MEMP_MAX]
void memp_free(memp_t type, void *mem)
#define SYS_ARCH_DECL_PROTECT(x)
#define LWIP_ERROR(message, expression, handler)
u8_t memp_memory_PBUF_POOL_base[]
#define LWIP_DEBUGF(debug, message)
#define LWIP_DBG_LEVEL_SERIOUS
#define MEMP_OVERFLOW_CHECK
#define MEMP_STATS_INC_USED(x, i)
const char * memp_desc[MEMP_MAX]
#define PBUF_POOL_BUFSIZE
static struct memp * memp_tab[MEMP_MAX]
#define SYS_ARCH_PROTECT(x)
#define LWIP_ASSERT(message, assertion)
#define MEMP_STATS_DEC(x, i)
static const u32_t memp_sizes [MEMP_MAX] ICACHE_RODATA_ATTR
#define MEMP_STATS_INC(x, i)
void * memp_malloc(memp_t type)
#define SYS_ARCH_UNPROTECT(x)
#define LWIP_MEM_ALIGN(addr)