0

我正在编写一个正在读取传入串行数据包的类。数据包的布局带有一个标头、一些数据,然后是一个两字节的 CRC。

我还编写了一个类,我可以在其中构建要发送的数据包。此类具有 GenerateCRC() 方法,该方法允许调用者计算他们通过调用其他方法建立的数据包的 CRC。GenerateCRC() 调用仅在正确设置数据包头和数据后才调用。因此,此方法在 for 循环中迭代数据包并以这种方式计算 CRC。

现在我正在编写代码来读取数据包,我需要通过计算 CRC 来验证它们。我正在尝试尽可能多地重用以前的“builder”类,因为当我在数据包中读取时,我想将它存储在内存中,最好的方法是使用“builder”类。但是,我在计算 CRC 时遇到了障碍。

我正在考虑两种主要方法,但我无法权衡利弊并决定一种方法。这是我的两个选择:

  1. 在我读取字节时计算 CRC。我正在读取的数据被推送到一个队列中,所以我一次弹出一个字节。我将保持运行的“总”CRC,并在读入最后一个数据字节后立即完成计算。

  2. 仅在我读入完整数据包后计算 CRC。在这种情况下,我不必保留运行总数,但我必须再次遍历数据包。我应该注意,这将允许我重用我以前编写的代码。

目前,我倾向于选项 1,并将“构建器”和“阅读器”之间的任何常见功能移动到单独的头文件中。但是,我想确保第一个选项实际上在性能方面更好,因为它确实使我的代码更加混乱。

在此先感谢您的帮助。

4

1 回答 1

0

我会选择 2 号门。这允许通过在两端使用相同的代码来更简单地验证代码,并且还允许使用更快的 CRC 算法,一次处理四个或八个字节。

于 2013-10-01T15:57:08.493 回答