memp_std.h

---------ошибка не нашли завершение закрывающего тега ******** pos1=4315 pos1_=4323 tName='/strong' tName_='strong'

Все регионы , которые мы будет создавать будут размещены в одном массиве : memp_memory . Вот он объявлен в memp.c :

static u8_t memp_memory [ MEM_ALIGNMENT - 1
#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )
#include "lwip/memp_std.h" // - это интересный способ
// указать размер массива
];

#define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED)

MEMP_SIZE - это размер структуры memp, которая будет добавляться к началу каждого блока памяти в регионе и используется для служебных целей. По сути memp указывает на следующий блок памяти (next). Таким образом строятся связанные цепочки блоков.

struct memp
{
	struct memp *next;
#if MEMP_OVERFLOW_CHECK
	const char *file;
	int line;
#endif /* MEMP_OVERFLOW_CHECK */
};

В коде используется такой подход : переопределяется #define LWIP_MEMPOOL много раз и потом делается #include "lwip/memp_std.h" . Это делается просто для того ,чтобы один раз прописать создание нового региона и автоматически появятся записи в нужных массивах.

В массиве memp_sizes будут собраны размеры блока памяти для каждого региона.

#if !MEM_USE_POOLS && !MEMP_MEM_MALLOC
static
#endif
const u16_t memp_sizes [ MEMP_MAX ] = {
#define LWIP_MEMPOOL(name,num,size,desc)  LWIP_MEM_ALIGN_SIZE(size),
#include "lwip/memp_std.h"
		};

В массиве memp_num будут собраны размеры блоков для каждого региона.

#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */

/** This array holds the number of elements in each pool. */
static const u16_t memp_num [ MEMP_MAX ] = {
#define LWIP_MEMPOOL(name,num,size,desc)  (num),
#include "lwip/memp_std.h"
		};

Для постоянного хранения первого свободного блока в каждом регионе используется массив memp_tab .

static struct memp *memp_tab [ MEMP_MAX ];