현재 임베디드 보드에서 LWIP (경량 TCP/IP 스택)를 포팅하려고합니다.lwip 스택에서 선언 된 하나의 전역 배열에 대해 계산 된 크기에 관한 혼동
찾고있는 코드 중에 하나의 배열 선언 (memp.c
파일에서)이 나에게 이상한 선언이 나왔다.
유효한 선언이지만이 점에 관해서는 혼란 스럽습니다. 얼마나 많은 공간을 차지하고 어떻게 계산할 수 있습니까? 어떻게 LWIP_MEMPOOL
매크로가 확장 되었습니까?
선언 보이는
/** This is the actual memory used by the pools (all pools in one big block). */
static unsigned char memp_memory[MEM_ALIGNMENT - 1
#define LWIP_MEMPOOL(name,num,size,desc) + ((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))
#include "memp_std.h"
];
그리고 이제
/** This array holds the number of elements in each pool. */
static const unsigned int memp_num[MEMP_MAX] = {
#define LWIP_MEMPOOL(name,num,size,desc) (num),
#include "memp_std.h"
};
나
/* 32-bit alignment */
#define MEM_ALIGNMENT 4
#define MEMP_SIZE 0
#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))
#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x))
MEMP_MAX
여기
array
선언 위에에서 사용되는 각 매크로 해상력을 제공 할 수
같은 여기
/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */
typedef enum {
#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name,
#include "memp_std.h"
MEMP_MAX <--------------------//MEMP_MAX
} memp_t;
그리고는 memp_std.h
에서 memp_std.h
많은 구조 이름 sizeof(struct xxx)
사용하지만 난 모든 구조에 대한 정의를 포함 할 수없는 나는 거기에있다. 그래서 크기가 있다고 가정 할 수 있습니다.
LWIP_MEMPOOL
매크로 사용 방법을 설명 할 수 있습니까? 어떻게 배열이 정의 되었습니까? 그 배열의 크기가 어떻게 알려졌습니까?
+1 yes..getting 몇 가지 아이디어를 :
다음은 첫 번째 코드 샘플이 약 (공백을 조정하고, 모든 매크로 기호 확장) 어떻게 보일까입니다. –
하나의 의심, 여기서'+'연산자는 어디서 오는가? –
@Jayesh 이것은 매크로 정의의 첫 번째 문자입니다 :'#define LWIP_MEMPOOL (name, num, size, desc) + ((... ... – user694733