zoukankan      html  css  js  c++  java
  • Can通讯中Intel与Motorola区别

    一、高地址和低地址

     

     

     

    二、高字节低字节

    如十六进制:0x01 00 00 04 。则04属于低字节,01属于高字节

     

    三、大小端模式

    (1)在内存中的存放顺序为低字节存放在高地址,则为大端模式

     

    Motorola高字节(高位)在前(低地址).

     

     

      

    (2)在内存中的存放顺序为字节存放在低地址,则为小端模式

     

    Intel低字节(低位)在前(低地址)

    四、大小端相互转换

    通过移位操作再或

    1 //16位
    2 ushort A;
    3 (A & 0xFF00)>>8 | (A & 0x00FF)<<8;
    4 
    5 //32位
    6 ushort A;
    7 (A & 0xFF000000)>>24 | (A & 0x00FF0000)>>8
    8 |(A & 0x0000FF00)<<8 | (A & 0x000000FF)<<24;

    五:Intel与Motorola内存图

    信号的起始位,一般来讲,主机厂在定义整车CAN总线通信矩阵时,其每一个信号都从其最低位开始填写,这样也符合使用习惯。所以信号的起始位就是信号的最低位。这也与CANoe中CANdb++的定义Startbit含义一致。

    CAN总线上的消息单帧某个信号的值计算(C#)

     1 public static ulong GetMotorolaSignalValue(byte[] data, int startBit, int bitLength)
     2         {
     3             ulong canSignalValue = 0;
     4             for (int i = data.Length - 1, j = 0; i >= 0; i--, j++)
     5             {
     6                 canSignalValue += (ulong)data[j] << (i * 8);
     7             }
     8 
     9             int x = startBit / 8;
    10             int y = startBit % 8;
    11             int z = x * 8 + 8 - y;
    12             int rightMoveCount = data.Length * 8 - z;
    13 
    14             canSignalValue >>= rightMoveCount;
    15 
    16             return canSignalValue & ulong.MaxValue >> 64 - bitLength;
    17         }
    18 
    19         public static ulong GetIntelSignalValue(byte[] data, int startBit, int bitLength)
    20         {
    21             ulong canSignalValue = 0;
    22             for (int i = data.Length - 1; i >= 0; i--)
    23             {
    24                 canSignalValue += (ulong)data[i] << (i * 8);
    25             }
    26 
    27             int x = startBit / 8;
    28             int y = startBit % 8;
    29 
    30             int rightMoveCount = x * 8 + y;
    31             canSignalValue >>= rightMoveCount;
    32             return canSignalValue & ulong.MaxValue >> 64 - bitLength;
    33         }

    内存中各对象存放顺序

    1、原则

    (1)一个整数类型内部

    低地址存储低位,高地址存储高位。比如int a=1,则存储情况为0000(高地址) 0000 0000 0001(低地址)

    (2)若干个局部变量(在栈中存储的)

    先定义的高地址,后定义的低地址

    (3)类、结构体或数组的元素

    先定义的低地址,后定义的高地址

    参考:

    Intel格式与Motorola格式的区别

    https://blog.csdn.net/oqqHuTu12345678/article/details/82823890

    CAN总线上的消息单帧某个信号的值计算(C#)

    作者:VueDi
    出处:https://www.cnblogs.com/VueDi/
    本文版权归作者所有,欢迎转载,转载请注明出处:VueDi:(https://www.cnblogs.com/VueDi/)

  • 相关阅读:
    POJ-1321-棋盘问题
    HDU-2553-N皇后问题
    POJ-1502-MPI Maelstrom
    POJ-3268-Silver Cow Party
    POJ-1125-Stockbroker Grapevine
    SPFA算法模板
    邻接表
    关于apache做301的问题
    在eclipse中使用正则表达式进行搜素
    sprintf数据库查询的作用
  • 原文地址:https://www.cnblogs.com/VueDi/p/14714365.html
Copyright © 2011-2022 走看看