用于调试日志的循环缓冲区

时间:2013-04-25 23:05:16

标签: c algorithm data-structures embedded

我正致力于实现内存调试日志记录机制。要求如下

  • 用于存储调试消息的缓冲区是固定的,比方说4KB
  • 写入缓冲区的调试消息大小可以是10个字节或2000个字节或更多
  • 缓冲区已满时,应调整调试消息。
  • 必须按照插入缓冲区的顺序检索调试消息。

我正在考虑将其作为单个链表实现,并使用muncher在使用所有缓冲区时收集缓冲区。

你们觉得怎么样?任何指针和建议都将非常感激。

0_l_0

1 个答案:

答案 0 :(得分:3)

Thanx大家的回复。这是我最终确定的实现。

  • 插入环中的每条消息都将以消息长度为前缀
  • 会有一个头尾指针和ring_size。
  • 对于要写入环形缓冲区的每条消息,我将执行以下检查

    • 新消息的环形缓冲区中是否有空格?
    • 消息是否需要移动头部以便为插入的新消息腾出空间,如果是,则通过移动头部直到我们有足够的空间容纳新消息来选择最旧的消息。现在插入消息并更新尾部。
    • 我必须考虑的另一件事是从缓冲区读取/写入消息时的包装。例如,当要插入的新消息超出环边界时,这是一个特殊的写操作,当我们到达缓冲区末尾时会有环绕。本质上,带有回绕的消息读/写导致两个读/写操作。一次写入/读取直到响铃结束,另一次读取/写入从缓冲区开始。
  • 由于头部指向最旧的消息,我可以使用前缀为消息的长度遍历环,因此排序不是问题。

归零 0_l_0