2

我有一个一般性的问题。我在微控制器上记录错误。但是,例如,微控制器比 Windows 计算机具有更多有限的资源。就我而言,我将 64 个错误代码保存在由 FreeRTOS 管理的队列中。我选择了 64,因为资源有限。

我的问题是:这个队列满了怎么办?

通过 USB 连接到微控制器的客户端负责读取这些错误代码,从而将它们从队列中删除。但是当客户端没有这样做时,队列会在 64 个错误代码后被填满。

我应该从队列中删除最旧的错误并将其替换为最新的吗?还是应该保存未读的错误代码并丢弃新的错误代码,只要队列已满?

请给我你的意见,为什么?

提前感谢您的建议。

4

3 回答 3

3

不要担心 64 与任何其他尺寸。无论大小如何,您最终都需要做出此决定,因为主机可能会决定从不读取队列。

正确的方法取决于您的系统如何工作以及您记录的错误类型。

保持第一个记录的好处:如果您有一个系统,如果出现问题,它会级联成许多其他故障,那么记录第一个错误将有助于确定导致错误链发生的原因。

保持第一次记录的弱点:取决于主机何时决定读取错误,代码可能是 1 分钟或 1 周前,没有人知道。正如 Ian 的回答所指出的,可以向主机提供错误计数,因为它知道它丢失了它们。

保持上次记录的好处: 如果您的错误之间有很多独立性,那么最旧的错误可能并不重要,并且只有最新的错误可以很好地了解设备的当前状态。

保持最后记录的缺点: 保持第一个的好处的倒数。您可能会丢失所有错误的根本原因。

因此,您必须查看您的设备可能产生的错误类型,并确定哪些技术最有可能对您的用户有用。

于 2012-10-12T13:54:00.950 回答
2

我也会丢弃最旧的,但是我会考虑其他存储有用诊断的方法。在我们的系统中,我们存储了 16 个带时间戳的错误代码,这些错误代码会随着新代码的出现而被覆盖。

但是,我们还存储了一些事件计数器(其中之一可能是“总错误”或“丢弃的错误”),因为它们可以在不占用太多空间的情况下告诉您有用的信息——一个字节可以在溢出之前计算 255 个错误/事件。

有些事情最好记录下来(EG 一种特定的故障类型),而有些事情则比较好统计(EG 重新启动、登录失败、丢包)。

于 2012-10-12T15:12:53.837 回答
2

我会丢弃队列中最旧的错误。此外,我会在队列中放置一个额外的错误代码,以便客户端读取的第一个错误代码表明一个或多个错误已被丢弃。根据您报告错误的方式,您的系统可能会报告已删除的错误报告数量。

于 2012-10-12T13:07:12.350 回答