近日開始閱讀野火《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枚舉類型