DBC学习(二)

本文深入探讨DBC中的ByteOrder和Startbit,包括Motorola和Intel两种格式的特点,以及Startbit的六种显示形式。内容涵盖信号公式、Multiplexing/Group的应用,解释了信号组和信号复用的原理,以及报文信号的发送方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ByteOrder与Startbit

我们知道计算机存储数据是以字节(Byte)为单位的,将某个字节存入某个地址或从某个地址读出某个字节,对于单字节数据,这种处理方式简单直白没有问题,但当处理多字节数据时就会遇到问题:这些字节要按照怎样的顺序存入或读出地址空间呢?假设我们有一个uint32型的无符号四字节数据0x12345678U,还有一段为该数据开辟的地址空间,可以很容易找到两种解决方案:

方案A:从数据的最高字节开始依次放入地址空间,最高字节放在最低地址;

方案B:与方案A相反,从数据的最低字节开始依次放入地址空间,最高字节放在最高地址;

实际上方案A就是常说的Motorola格式(Big-Endian),方案B就是Intel格式(Little-Endian)。由于两种格式的字节顺序是反过来的,用Motorola格式存储的数据绝不可用Intel格式来解析,反之亦然。现在,我们将数据0x12345678U换成DBC里的信号,地址空间换成DBC里报文的数据字节位置,自然就得到了信号的两种字节序(ByteOrder)形式。

在确定了ByteOrder后,信号在报文中的位置由Startbit指定,在讲Startbit之前,需要了解下DBC对报文字节bit位的编排方式:

bit位按照从右到左、从上到下的方式编号,Byte0的bit位是7~0,Byte1的bit位是15~8,其他字节依此类推,此为第一种方式,然后,我们将上图水平镜像翻转一下:

就得到了bit位的第二种编排方式,以上两种方式是可以在Message的Layout下显现的,另外还有一种方式,将第一种进行垂直镜像翻转(Byte位置不变):

这第三种方式在Layout下是看不到的,但是会体现在Startbit的显示上(见下面的Motorola Backward)。

下面来看Startbit,根据ByteOrder不同,Startbit总共有六种显示形式,其中Motorola有四种,Intel有两种。假设有一条总长(DLC)为4字节的报文,包含一个长度12bit的信号,我们来看下这6种形式有什么区别:

1. Motorola Forward LSB:

首先Motorola格式决定了信号的高4bit位在前(Byte1),低8bit位在后(Byte2),然后Forward可理解为从前向后(正向)找到lsb所在的位置即为信号的起始位,这里为Bit16。

2. Motorola Forward MSB:

和上一种唯一的区别是用信号msb所在位置(Bit11)作为起始位。

3. Motorola Backward:

Backward可理解为从后往前(反向)找到lsb所在位置(bit8)作为信号的起始位,注意这里使用bit位编排的第三种方式。

4. Motorola Sequential:

Sequential可理解为正序查找,这种比较符合我们计数习惯,从上到下、从左到右(bit位编排第二种方式)计数找到msb所在位置(bit12)作为信号的起始位。

5. Intel Standard:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值