簡體   English   中英

此宏功能有什么作用?

[英]What does this MACRO function do?

此功能:

FIFO_ELEM_AT(p_fifo, index) ((uint8_t*) ((uint8_t*) p_fifo->elem_array) + (p_fifo->elem_size) * (index))

而“ p_fifo”的定義為:

typedef struct
{
    void* elem_array;
    uint32_t elem_size;
    uint32_t array_len;
    uint32_t head;
    uint32_t tail;
    fifo_memcpy memcpy_fptr; /* must be a valid function or NULL */
  } fifo_t;

總體而言,它正在嘗試對靜態fifo數據結構進行處理。 我真的無法告訴您通過函數中描述的計算可以實現的目標。 請幫忙!

您應該閱讀正在查看的代碼的文檔。
否則,您將無法進行猜測。 您似乎在尋求猜測的幫助。
這是我的猜測:

  • 提到的結構類型描述了用於處理特殊數據結構實例的所有信息。
  • 由於名稱的原因,它可能是FIFO,也稱為“ ringbuffer”,也稱為“隊列”(由MM注釋)
  • 它需要一個附帶的存儲器,用作實際的FIFO。
  • 要使用的內存由指向它的指針“ elem_array”引用。
  • “ elem_size”是FIFO中一個元素的大小
  • “ head”引用要從FIFO返回的下一個元素
  • “ tail”引用添加到FIFO中的最后一個元素
  • 或相反
  • “ memcpy_fptr”引用了一個潛在的優化函數,用於將元素移入和移出FIFO
  • 用引號引起的宏可以訪問給定索引處的FIFO中的元素
  • 以指向uint8_t的指針的形式; 而不是元素類型的指針
  • 宏獲取到FIFO的地址,執行一些指針運算(包括元素的大小和給定的索引),並由此求出結果:uint8_t-指向已索引元素的指針

在我的猜測之上,這是我基於意見的建議:

  • 使用結果(指向uint8_t的指針)時,將其轉換為適當的類型
  • 使用宏時,請確保為現有元素(至少是已添加的元素)提供有意義的值的索引
  • 使用宏時,為尚未從FIFO返回的元素提供索引
  • 不要使用宏,這似乎違反了FIFO的想法,
    為了調試目的可能會獲得有關FIFO內容的信息的異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM