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#)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM