1. 队列类型及操作的宏定义: //队列类型表示:Queue_元素类型(如元素为整形的队列类型为:Queue_int)//_ET:元素类型#defineQ_TYPE(_ET)Queue_##_ET//队列变量定义:每个队列对应一个数组,用于存放元素,数组名表示成:qBuf##queue//在定义队列变量时需指定队列长度:由len指定//ET:元素类型//queue:队列变量名//len:队列长度#defineQ_DEFINE(ET,queue,len)ETqBuf##queue[len];intqBufLen##queue=sizeof(ET)*len;Q_TYPE(ET)queue//队列类型(结构体)定义://ET:元素类型//Queue_##ET:具体化后的队列类型,由不同的元素类型决定#defineQ_TYPE_DEFINE(ET)typedefstruct...{ET*pElems;intfront,rear,size;intmaxSize;}Queue_##ET;//队列变量声明表示:用于声明外部全局变量//ET:元素类型//queue:队列变量名#defineQ_EXTERN(ET,queue)externETqBuf##queue[];externintqBufLen##queue;externQ_TYPE(ET)queue//队列初始化#defineQ_INIT(queue,len)...{memset(qBuf##queue,0,qBufLen##queue);queue.pElems=qBuf##queue;queue.size=0;queue.front=queue.rear=0;queue.maxSize=len;}//队空#defineQ_EMPTY(queue)(queue.front==queue.rear)//队满#defineQ_FULL(queue)((queue.rear+1)%queue.maxSize==queue.front)//入队#defineQ_PUT(queue,pput)...{if(Q_FULL(queue))...{Uart_Printf("MQOF ");}else...{queue.pElems[queue.rear]=*pput;queue.size++;queue.rear=(queue.rear+1)%queue.maxSize;}}//出队#defineQ_GET(queue,pget)...{if(queue.front==queue.rear)...{pget=NULL;}else...{inthead=queue.front;queue.front=(queue.front+1)%queue.maxSize;pget=&queue.pElems[head];queue.size--;}}//队列类型实例化:根据指定的不同类型Q_TYPE_DEFINE(sGUI_MESSAGE)//消息队列Q_TYPE_DEFINE(char) 2.定义队列: //定义队列长度#defineMSG_QUEUE_LEN100//预定义消息队列的长度#defineKBD_BUF_LEN10//定义队列变量Q_DEFINE(sGUI_MESSAGE,msgQueue,MSG_QUEUE_LEN);Q_DEFINE(char,keyQueue,KBD_BUF_LEN);//显式初始化voidq_init()...{Q_INIT(msgQueue,MSG_QUEUE_LEN);Q_INIT(keyQueue,KBD_BUF_LEN);} 3.外部引用队列变量: //外部引用,使用声明Q_EXTERN表达式Q_EXTERN(sGUI_MESSAGE,msgQueue);Q_EXTERN(char,keyQueue); 4.操作队列: inti=65;while(!Q_FULL(keyQueue))...{Q_PUT(keyQueue,&i);i++;}char*pch;while(!Q_EMPTY(keyQueue))...{Q_GET(keyQueue,pch);if(pmsg)printf("%c ",*pch);}