【问题标题】:Compare multiple bytes比较多个字节
【发布时间】:2012-09-26 07:52:09
【问题描述】:

我正在从 USART 接收字节并将它们放入内存寄存器。字节是我必须阅读并相应地回复消息的命令。我知道如何比较单个字节,建议我使用一种算法来比较多个字节。

例如,接收到的字节在 16 进制 16 04 32 01 00 32 中是这样的。它们的长度不同,因此比较会比较困难。

【问题讨论】:

  • 循环比较?另外,what have you tried?
  • 我不知道该采取什么方法。我有几个命令需要比较。我是否必须为每个命令创建循环,或者是否有更简单的表查找方法。我需要一些示例代码。我试图对命令中的字节求和,但这不起作用,因为我发现 2 个不同的命令具有相同的总和
  • 我猜不是所有收到的消息都是重要的,但一两个字节是消息代码,其余的是数据。这将简化事情,因为您只需比较单个(或那两个)字节,然后跳转到子程序来处理实际的消息数据。
  • 所以 Joachim,您建议将消息​​的数据部分与循环进行比较。所以我必须创建与我期望的消息一样多的循环并相应地跳转?
  • 为您的逻辑绘制流程图。当看到它时,事情应该会变得很明显。

标签: assembly microchip


【解决方案1】:

您只需要比较足够的字节就可以清楚地识别它是什么类型的消息(在第一步中您不需要关心的实际数据有效负载)。对于大多数串行协议,它只是指定位置的一个字节。

通过查看您的示例消息,我猜第一个字节是消息类型,第二个字节是数据负载的长度。如果是这种情况,那么您不需要检查比第一个字节更多的内容并相应地跳转。这主要是通过使用消息类型(第一个字节)索引的跳转表来完成的。

处理实际消息数据负载的函数可以对数据做任何它想做的事情,但您不需要检查完整的消息只是为了找出如何处理消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多