В настоящее время я работаю над проектом ZigBee WSNDemo, и я застрял в этой части кода. В принципе, я должен использовать этот макрос для целей очереди в функции appInitMsgSender
.Использование MACROS для очереди
void appInitMsgSender(void)
{
txState = APP_MSG_TX_FREE_STATE;
resetQueue(&appToSendQueue);
resetQueue(&appFreeQueue);
resetQueue(&appSentQueue);
resetQueue(&appDoneQueue);
for (uint8_t i = 0; i < ARRAY_SIZE(appTxBuffers); i++)
{
putQueueElem(&appFreeQueue, &appTxBuffers[i].next);
}
}
Сверху сообщение посылает функцию инициализации сообщения. Для этого используются макросы. Я хочу знать, как оба связаны. Я имею в виду, как понимать работу этого кода.
#define DECLARE_QUEUE(queue) QueueDescriptor_t queue = {.head = NULL,}
// Type of queue element
typedef struct _QueueElement_t
{
struct _QueueElement_t *next;
} QueueElement_t;
// Queue descriptor
typedef struct
{
QueueElement_t *head;
} QueueDescriptor_t;
INLINE void resetQueue(QueueDescriptor_t *queue)
{
queue->head = NULL;
}
Я действительно смущен с использованием указателя здесь. Я знаю, как работает указатель и теория. Но в приведенном выше контексте я сбитый с толку.