CANoe中的英特尔(Inter)格式与摩托罗拉(Motorola)格式

这篇具有很好参考价值的文章主要介绍了CANoe中的英特尔(Inter)格式与摩托罗拉(Motorola)格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CANoe中的英特尔(Inter)格式与摩托罗拉(Motorola)格式

一、 背景说明

制作过DBC文件的人都知道信号(Signal)的字节排序(Byte Order)属性 中有英特尔格式(Inter)格式与摩托罗拉(Motorola)格式可以选择,如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

这两种格式对应的就是我们常说的大端模式(Big-endian)和小端模式(Little-endian).

1.1. 介绍大端模式与小端模式

举一个例子,比如我们要保存一个数字: 0x12 34 56 78 , 通过它在内存中的分布位置来说明大小端存储的差异。

大端模式(Big-Endian):就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端

低内存地址 -------------> 高内存地址
0x12  |  0x34  |  0x56  |  0x78

小端模式(Little-Endian):就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

低内存地址 -------------> 高内存地址
0x78  |  0x56  |  0x34  |  0x12

可以很明显看到, 大端模式与我们直观非常相近,因为我们书写习惯是将高位写在前面,低位写在后面。

我们常用的X86结构是小端模式;并且很多的ARM架构也都为小端模式。

举个例子

16bit宽的数字0x1234在Little-endian/Big-endian模式下, 内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址 小端模式存放内容 大端模式存放内容
0x4000 0x34 0x12
0x4001 0x12 0x34

32bit宽的数字0x12345678 在Little-endian/Big-endian模式下,内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址 小端模式存放内容 大端模式存放内容
0x4000 0x78 0x12
0x4001 0x56 0x34
0x4002 0x34 0x56
0x4003 0x12 **0x78 **
大端模式与小端模式的优缺点
  • 大端模式的优点:符号位的判定固定为第一个字节,容易判断正负
  • 小端模式的优点:强制转换数据不需要调整字节内容

1.2. 大端模式与小端模式的判断与转换

判断电脑使用了大端模式还是小端模式

使用C语言来实现:

int i=1;   
char *p=(char *)&i;   
if(*p == 1)     
    printf("小端模式"); 
else // (*p == 0)
    printf("大端模式");
大端模式与小端模式的转换

将大端模式转换为小端模式的C实现:

#define BigtoLittle16(A)                 ((((uint16)(A) & 0xff00) >> 8) | \
                                         (((uint16)(A) & 0x00ff) << 8))


#define BigtoLittle32(A)                 ((((uint32)(A) & 0xff000000) >> 24) | \
                                         (((uint32)(A) & 0x00ff0000) >> 8) | \
                                         (((uint32)(A) & 0x0000ff00) << 8) | \
                                         (((uint32)(A) & 0x000000ff) << 24))

1.3. 介绍英特尔格式与摩托罗拉格式

英特尔格式与摩托罗拉格式与我们上面介绍的大端模式、小端模式特别类似:

  • Intel 格式:同小端(Little-endian),低字节在前
  • Motorola 格式:同大端(Big-endian),高字节在前

同时我们需要了解两个基本概念:

  • MSB : Most Significant Bit ------- 最高有效位
  • LSB : Least Significant Bit ------- 最低有效位

一般情况下,CAN协议在传输数据的时候,先传输LSB 后传输 MSB .

对于数据占用一个字节(Byte)或者不足一个字节(Byte)的,其实怎么传输影响不大,但是对于数据占用多个字节(Byte)的情况,这两种方式就需要注意了。

二、 实际举例说明

2.1. 使用纯英特尔格式

假设现在有一个Message名称为Msg_1 ,其中包含三个Signal,信息如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

在Vector的数据库编辑工具中,可以看到这三个信号的Layout如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

关于Vector的DBC编辑工具,做以下说明:

  1. 对于标准的CAN报文,统一采用8*8表格来表示其信号布局(Layout)。 第一行表示第一个字节(也就是Byte_0 ),后面依次;第一列表示一个Byte中的最高bit位(也就是bit_7 )
  2. 每一个Signal都有其最低有效位(LSB与最高有效位(MSB), 对于只占一个bit的信号,因为其LSB与MSB在一起,所以就不显示了。
  3. 数据传输时候,总是遵循: 从上到下, 从右到左

从上图我们可以看到采用英特尔格式时:

  1. 不管信号占多少个字节,只要在一个字节内部,总是高bit位置(比如bit7高于bit0)表示的高位
  2. 在信号占多个字节时, LSB在前面的位置(地址小),MSB在后面的位置(地址大), 也就是小端模式的低字节在前高字节在后

2.2. 使用纯摩托罗拉格式

将上面介绍的Msg_1 中的三个Signal全部换成摩托罗拉格式,更换后如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

在Vector的数据库编辑工具中,可以看到这三个信号的Layout如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

从上图我们可以看到采用摩托罗拉格式时:

  1. 不管信号占多少个字节,只要在一个字节内部,总是高bit位置(比如bit7高于bit0)表示的高位
  2. 在信号占多个字节时, MSB在前面的位置(地址小),LSB在后面的位置(地址大), 也就是大端模式的高字节在低字节在后

2.3. 混合英特尔格式与摩托罗拉格式

将上面介绍的Msg_1 中的第1个和Signal换成摩托罗拉格式,第二个Signal保持为英特尔格式,如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

在Vector的数据库编辑工具中,可以看到这三个信号的Layout如下:
摩托罗拉格式和英特尔格式,Vector,汽车,c语言

其实这种排序完全没有任何实际意义(不会有公司采用这种方式排序的),这里仅仅是做展示。

三、 CAPL内置的大小端转换函数

由于Intel格式与Motorola格式之间的转换很常见,所以在CAPL内置的Byte Swapping函数,我们下面进行介绍。

常用的函数语法

word swapWord(word x); // form 1         word (unsigned, 2 Byte)

int swapInt(int x); // form 2            int (signed, 2 Byte)

dword swapDWord(dword x); // form 3      dword (unsigned, 4 Byte)

long swapLong(long x); // form 4         long (signed, 4 Byte)

int64 swapInt64(int64 x); // form 5      int64(signed, 8 Byte)

qword swapQWord(qword x); // form 6      qword(unsigned, 8 Byte)

可以看到这边介绍的都是超过1个字节的数据类型(2Byte到8Byte), 另外没有介绍:

  1. 浮点型: float (8 Byte), double (8 Byte)
  2. 1个字节的Char类型: char (1 Byte)
  3. 1个字节的Byte类型: byte (unsigned, 1 Byte)

函数功能描述

交换入参中的字节。CAPL算法遵循“小端格式”(英特尔)。交换函数用于:

  1. 交换转换到“big-endian格式”(Motorola)
  2. 从“big-endian格式”转换的字节

函数参数说明

要交换其字节的值。(Value whose bytes are to be swapped.)

函数返回值说明

交换字节后的值。(Value with swapped bytes.)

举例说明

示例代码:文章来源地址https://www.toymoban.com/news/detail-608688.html

bigEndian = swapInt(1234); // create constant 1234 for Motorola processors

到了这里,关于CANoe中的英特尔(Inter)格式与摩托罗拉(Motorola)格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在英特尔 CPU 上微调 Stable Diffusion 模型

    扩散模型能够根据文本提示生成逼真的图像,这种能力促进了生成式人工智能的普及。人们已经开始把这些模型用在包括数据合成及内容创建在内的多个应用领域。Hugging Face Hub 包含超过 5 千个预训练的文生图 模型。这些模型与 Diffusers 库 结合使用,使得构建图像生成工作流

    2024年02月15日
    浏览(76)
  • 联手英特尔,释放星飞分布式全闪存储潜能

    近日,英特尔官网发布了与 XSKY 星辰天合联手打造的解决方案,即 XSKY 的新一代全闪分布式存储系统 XINFINI,该存储系统采用英特尔 QAT 加速数据压缩/解压缩,从而大幅度提升存储系统性能。 全闪存储系统面临的解压缩挑战 在存储系统的数据服务层中,通常需要进行一定的压

    2024年02月01日
    浏览(35)
  • 在英特尔 CPU 上加速 Stable Diffusion 推理

    前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 分布式微调 和 推理。 英特尔至强处理器: https://www.intel.com/content/www/us/en/products/details/processors/xeon/scal

    2024年02月09日
    浏览(43)
  • 解决英特尔无线网卡WiFi或者蓝牙突然消失问题

    win+R,输入“devmgmt.msc”,检查设备管理器中的无线网卡驱动是否安装好。 访问https://www.intel.cn/content/www/cn/zh/download/19351/windows-10-and-windows-11-wi-fi-drivers-for-intel-wireless-adapters.html下载对应系统版本的英特尔无线网卡WiFi驱动后安装。 访问https://www.intel.cn/content/www/cn/zh/download/18649

    2024年01月17日
    浏览(75)
  • 英特尔:处理器王座不再,AI战溃不成军

    英特尔于北京时间2024年1月26日上午的美股盘后发布了2023年第四季度财报(截止2023年12月),要点如下: 1、核心数据:数据超预期,实际经营面符合预期。 英特尔在2023年第四季度 实现营收154亿美元,略超市场预期(152亿美元)。本季度收入环比继续提升,主要得益于PC客户

    2024年02月19日
    浏览(36)
  • 英特尔和 ARM 将合作开发移动芯片技术,如何看待双方合作?

    最近市场传出Arm要自产芯片,供智能手机与笔电等使用后,外媒指Arm自产芯片将由英特尔晶圆代工部门打造,变成英特尔晶圆代工客户。将采用英特尔18A工艺,可以对标台积电的2纳米。 最近很多小伙伴找我,说想要一些ARM的资料,然后我根据自己从业十年经验,熬夜搞了几

    2024年01月17日
    浏览(41)
  • 英特尔 D435/D435i双目相机 使用指南

    目录 Intel RealSense D435深度相机介绍: 关于左右红外图像: 关于像素深度的检索: Intel RealSense 各种工具: 工具的介绍 相机基本操作 相机自校准 获取相机参数 python脚本 Linux命令行 相机运行并显示画面 获得深度图像 点云 帧对齐 英特尔官方手册:调整深度摄像头以获得最佳

    2024年02月02日
    浏览(36)
  • Ubuntu 22.04安装英特尔显卡驱动玩转AIGC

    作者 : 英特尔网路与边缘计算事业部开发者关系经理 李翊玮 本文将介绍如何使用EIV 用5行指令在快速搭建含英特尔显卡及OpenVINO的AI开发环境, 并简洁说明如何使用OpenVINO 及英特尔显卡优化文生图模型Stable Diffusion 的速度。 EIV (Edge Insight Vision) 具有一组预集成组件,专为边缘

    2024年02月06日
    浏览(39)
  • 英特尔12代处理器安装WIN10,以及解决大小核调度。

    设备信息:拯救者 2022款,12700H,WIN11。 使用需求:安装WIN10以及正确打上驱动,并解决大小核心调度问题。 安装版本:Windows10 专业版 1909 (2019 Dec)  18363.535 本文主要分为 两部分 :1.系统安装  2.配置调度 1. 驱动备份(如有) :我使用自带的XX电脑管家,备份出厂系统所安装的

    2024年02月05日
    浏览(53)
  • 英特尔13代桌面CPU平台安装ubuntu20.04LTS记录

    安装环境一: i7-13700K  华硕Z790-P  16X2GB内存   华硕 TUF 3070 O8G 安装环境二: i5-13400    华硕B760M-A D4 8x2GB内存   UHD730核显 安装系统: ubuntu20.04LTS(首先用光驱安装失败,后面用U盘更换ubuntu22.04.2LTS成功) 因为特殊原因,先用光驱安装ubuntu20.04LTS,首先安装很慢很慢,要等半小时进

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包