近日开始阅读野火《LwIP 应用开发实战指南》,遇到不懂的地方写下笔记,与同好分享。本人水平有限,如有不对,请留言指正。
第一个问题: 对动态内存池的枚举宏定义的理解
野火的解释如图:
我用例程来理解上述野火的解释:(编译环境ubuntu18.04)
#include <stdio.h>
enum spectrum {
red, //0
orange, //1
yellow, //2
green, //3
blue, //4
violet //5
};
typedef enum{
//为演示方便,去掉了size参数
#define LWIP_MEMPOOL(name,num,desc) MEMP_##name,
LWIP_MEMPOOL(RAW_PCB,MEMP_NUM_RAW_PCB,"RAW_PCB")//0
LWIP_MEMPOOL(UDP_PCB,MEMP_NUM_UDP_PCB,"UDP_PCB")//1
LWIP_MEMPOOL(TCP_PCB,MEMP_NUM_TCP_PCB,"TCP_PCB")//2
//LWIP_MEMPOOL(MY_PCB,MEMP_NUM_MY_PCB,"MY_PCB")
MEMP_MAX
}memp_t;
void main()
{
printf("color.blue=%d\n",blue);
printf("MEMP_MAX=%d\n",MEMP_MAX);
}
运行结果:
memp_tm枚举体中的MEMP_MAX值的大小根据LWIP_MEMPOOL语句多少自动增加,如果你把LWIP_MEMPOOL(MY_PCB,MEMP_NUM_MY_PCB,"MY_PCB")前的注释取消,那么MEMP_MAX=4
为演示方便,去掉了size参数。
#define LWIP_MEMPOOL(name,num,desc)中只有name参数在本例的枚举中有用,仅为演示使用,其它参数在LWIP中还是有用的。
本文涉及的知识点有:c枚举类型