【问题标题】:Extract bits from the CAN message data(8 bytes)从 CAN 报文数据中提取位(8 字节)
【发布时间】:2020-01-22 06:31:43
【问题描述】:

我想从 CAN 消息中提取位(8 个字节)。

那么,我如何从 8 个字节中提取位。

【问题讨论】:

  • 在我看来,您应该使用 DBC 或 Arxml 中的一些信号定义,然后对 Message::signal 进行操作。但如果你真的想从字节中提取一些位,请使用按位运算和掩码。

标签: capl canoe


【解决方案1】:

这是从一个字节中获取位的代码块:

on message myMessage
{
 byte bitArray[8]; 
 int iByteToRead = 0;

 f_ByteToBitArray(this.byte(iByteToRead),bitArray);
 write ("f_ByteToBitArray %X :Bits %X %X %X %X %X %X %X %X", iByteToRead , bitArray[0],bitArray[1],bitArray[2],bitArray[3],bitArray[4],bitArray[5],bitArray[6],bitArray[7]);  
}

void f_ByteToBitArray(byte in, byte out[])
{
  //                          7 6 5 4 3 2 1 0
  // f_ByteToBitArray 1 :Bits 0 0 0 0 0 0 0 1
 // f_ByteToBitArray 2 :Bits 0 0 0 0 0 0 1 0

 byte a;
 a = in;
 out[0] = a & 0x01;
 a = a >> 1;
 out[1] = a & 0x01;
 a = a >> 1;
 out[2] = a & 0x01;
 a = a >> 1;
 out[3] = a & 0x01;
 a = a >> 1;
 out[4] = a & 0x01;
 a = a >> 1;
 out[5] = a & 0x01;
 a = a >> 1;
 out[6] = a & 0x01;
 a = a >> 1;
 out[7] = a & 0x01;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多