繁体   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