这个MACRO功能有什么作用?

时间:2016-10-21 03:48:38

标签: c

这个功能:

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;

和" p_fifo"被定义为:

{{1}}

总的来说,它试图对静态fifo数据结构做些什么。我无法通过函数中描述的计算真正告诉您可能实现的目标。请帮忙!

1 个答案:

答案 0 :(得分:0)

您应该阅读您正在查看的代码的文档 否则你会被猜测困扰。你好像在寻求猜测的帮助 以下是我的猜测:

  • 上述结构类型描述了处理特殊数据结构实例的所有信息。
  • 由于名称,它可能是一个名为“ringbuffer”的FIFO,又名“队列”(由M.M.评论)
  • 它需要一个伴随的存储器,用作实际的FIFO。
  • 要使用的内存由指向它的指针“elem_array”引用。
  • “elem_size”是FIFO中一个元素的大小
  • “head”引用从FIFO返回的下一个元素
  • “tail”引用添加到FIFO的最后一个元素
  • 或其他方式
  • “memcpy_fptr”引用了一个可能优化的函数,用于将元素移入和移出FIFO
  • 引用的宏提供对给定索引的FIFO中元素的访问
  • 以指向uint8_t的指针的形式;而不是指向元素类型的指针
  • 宏获取FIFO的地址,执行一些指针算术(包括元素的大小和给定的索引),从而计算结果:uint8_t-指向索引元素的指针

除了我的猜测,这是我基于意见的建议:

  • 使用结果(指向uint8_t的指针)时,将其强制转换为适当的类型
  • 使用宏时,请确保为现有元素提供索引,至少是已添加的元素,并且具有有意义的值
  • 使用宏时,为尚未从FIFO返回的元素提供索引
  • 不使用宏,似乎违背了FIFO的想法,
    可能的例外情况是获取有关FIFO内容的信息以便进行调试