案例背景(共5页精讲):
对一个Motorola S-record(S19/SREC/mot/SX)文件,进行地址对齐Address Alignment

目录

1 为什么要进行“地址对齐Address Alignment”

1.1 “对齐长度”的选择

2 使用Vector HexView工具对S19文件进行“地址对齐Address Alignment”

2.1 “自动”完成“地址对齐Address Alignment”

2.2 “手动”完成“地址对齐Address Alignment”

2.3 Command line命令行说明

结尾


优质博文推荐阅读(单击下方链接,即可跳转):

点击返回「《Autosar从入门到精通-实战篇》总目录」

点击返回「《Autosar_BSW高阶配置》总目录」

点击返回《嵌入式硬件/软件开发刷写/烧录文件》专栏

1 为什么要进行“地址对齐Address Alignment”

S19/HEX文件是一种常见的嵌入式设备的可执行代码文件格式,它包含机器代码、数据和调试信息等。其中一个重要的概念就是地址对齐

S19/HEX文件之所以要进行地址对齐,是为了满足某些硬件和软件的要求,以确保程序或数据正确地加载和执行。下面是一些原因:

a)内存对齐要求:某些硬件架构对于特定类型的数据或指令的访问要求地址必须对齐到特定的边界。例如,某些处理器可能要求访问32位整数必须从4字节边界开始,否则可能会导致错误或性能下降。通过地址对齐,可以确保每个数据或指令的起始地址都符合硬件的要求。

b)加载和执行效率:地址对齐可以提高程序的加载和执行效率。当数据或指令按照对齐边界存储时,读取和处理这些数据或指令的速度更快。这是因为硬件可以利用并行处理或更高效的内存读取指令来处理对齐数据。

c)内存管理:地址对齐也有助于更好地管理内存。如果数据或指令不对齐存储,可能会导致内存碎片化,使内存利用率降低。通过强制地址对齐,可以减少内存碎片并更有效地利用可用内存。

d)性能优化:地址对齐有助于提高程序的性能。处理器通常可以更有效地访问对齐的数据,因为它们可以使用较少的指令或更高效的内存访问方式。这可以减少指令的执行时间和内存访问的延迟,从而提高整体性能。

e)数据结构要求:某些数据结构要求其元素在内存中按照对齐方式存储。例如,结构体或数组中的元素可能需要按照特定的对齐规则排列,以确保其成员访问的正确性和性能。

f)与外部设备的兼容性:某些外部设备或接口可能对地址对齐有特定的要求。例如,与外部设备进行数据传输时,设备可能要求数据按照特定的对齐方式发送或接收。如果数据不对齐,可能会导致数据传输错误或设备无法正确解析数据。

S19/HEX文件地址对齐机制的主要优点是:

a)生成兼容目标处理器的标准文件格式。地址对齐可以确保S19/Hex文件中的代码和数据能够被目标处理器正确访问和执行。

b)避免未定义行为。填充零可以避免未初始化数据被错误解释执行,保证代码的可靠性。

c)方便调试和烧录。地址连续和对齐的文件格式,有利于调试工具解析和烧录算法处理。

d)提高代码执行效率。对齐通常可以使处理器更高效地访问代码和数据,减少无效的等待周期。

但是, S19/HEX文件地址对齐机制也有一定缺点:

a)生成的文件体积会更大。由于填充零和对齐,文件中会包含一定冗余和无效数据,导致文件体积增大。

b)编译过程更复杂。编译器和链接器需要实现地址的计算和对齐,并在必要时插入填充,这增加了软件的实现难度和编译时间。

c)有时会由于过度对齐导致内存利用率降低。比如短数据被迫填充到4字节,会造成一定浪费。

d)不同的MCU和工具的地址对齐规则不同,这给文件兼容性带来一定难度。

e)固定的对齐规则可能无法适应某些特殊应用场景的需要,如部分MCU只在特定模式下才需要严格对齐。

1.1 “对齐长度”的选择

目标处理器的指令长度和数据宽度:例如,8位处理器通常采用1字节(8 bit)对齐;16位处理器采用2字节(16 bit)对齐;32位处理器采用4字节(32 bit)对齐;如32位ARM要求4字节对齐;8位8051要求1字节对齐…。这些需要看具体的芯片手册。

2 使用Vector HexView工具对S19文件进行“地址对齐Address Alignment”

2.1 “自动”完成“地址对齐Address Alignment”

基于批处理Bat(如下图中的Align_data_S19_File.bat)调用HexView工具提供的Command line,通过该脚本来实现S19文件(Boot+App.s19)的“地址对齐Address Alignment”。将该脚本集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,即可自动实现。见图1-1。

图1-1

Boot+App.s19摘录:

S104901F77D5
S123902078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F90919293949596973C
S123904098999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B71C
S1239060B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7FC
S1239080D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7DC
S12390A0F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F1011121314151617BC
S12390C018191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233343536379C
S10690E038393ADE
S105911E76775E
S123912078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F90919293949596973B
S123914098999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B71B
S1239160B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7FB
S1239180D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7DB
S12391A0F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F1011121314151617BB
S12391C018191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233343536379B
S10491E03852
S9030000FC

Align_data_S19_File.bat摘录:

@echo offRem Path to the executable exe of the Vector HexView tool on your PC
set "HexViewPath=D:\Align_data_S19\HexView\hexview.exe"Rem Input files Input_S19_File for address alignment
set "Input_S19_File=D:\Align_data_S19\Boot+App.s19"Rem Output file Output_S19_File after address alignment
set "Output_S19_File=D:\Align_data_S19\Boot+App_Output.s19"Rem Call the command line provided by the HexView tool to implement the address padding of the S19 file.
%HexViewPath% /S %Input_S19_File% /AD:8 /AF:0xFF /AL /XS -o %Output_S19_File%

运行该批处理Align_data_S19_File.bat,即可得到地址对齐Address Alignment后的Boot+App_Output.s19文件(8字节对齐)。

2.2 “手动”完成“地址对齐Address Alignment”

使用Vector Hexview工具打开一个S19文件,在菜单栏中依次选择Edit -- > Data Alignment

在弹出的Align data value对话框中,设置对应的对齐参数;

segment alignment value:表示对齐长度;

Fill character:表示填充字符;

Align size:如果选择,所有块的大小都是给定segment align value段对齐值的倍数。

地址对齐后的效果:

注意:

Align size:如果不选择,仅每个Block的开始进行地址对齐;

2.3 Command line命令行说明

/Ad:xx/Adyy    对齐数据。Xx是用标准C符号指定的,例如0xFF,而yy只是十六进制的数字。格式由分隔符':'或'='来区分。

每个区块的起始地址将被调整为给定参数xx的倍数。如果省略了分隔符':'或'=',参数xx是一个十六进制的数值。如果使用了分隔符,xx的值将以C语言解释,例如,/AD:0xFF与/AD:255或/AD:1111111b相同。这个值只能是一个无符号的char值。

/AL  对齐长度。

这个选项与/AD参数结合使用。它将所有数据块的长度调整为/ADxx选项中给出的参数的倍数。

命令行摘自“ReferenceManual_HexView.pdf”文件。

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

【嵌入式烧录/刷写文件】-1.9-S19文件的地址对齐Address Alignment相关推荐

  1. 【嵌入式烧录/刷写文件】-3.1-详解二进制Bin格式文件

    目录 1 什么是bin 2 bin文件的结构 3 如何打开bin文件 3.1 使用Vector HexView工具打开 3.2 使用Notepad++工具打开 3.3 使用Binary Viewer工 ...

  2. 【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件

    目录 1 什么是Intel Hex 2 Intel Hex的格式 2.1 Intel Hex的Record结构 2.1.1 "Record type记录类型"的说明 2.1.2 & ...

  3. 【嵌入式烧录/刷写文件】-5.1-详解map格式文件

    目录 1 Map文件格式 1.1 TARGET SECTION字段 1.2 FILE SECTION字段 1.3 STARTUP SECTION字段 1.4 SECTION-ALLOCATION SE ...

  4. 【嵌入式烧录/刷写文件】-1.1-详解Motorola S-record(S19/SREC/mot/SX)格式文件

    目录 1 什么是Motorola S-record 2 Motorola S-record的格式 2.1 Motorola S-record的结构 2.1.1 "Record type记录类 ...

  5. 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是痞子衡<ARM Cortex-M文件那些事>主 ...

  6. 使用python处理srec/s19文件

    一.s19文件 Motorola S-record是由Motorola创建的一种文件格式,它以 ASCII十六进制文本形式传送二进制信息.这种文件格式也可以称为SRECORD.SREC.S19.S28 ...

  7. 【VCU】详解S19文件(S-record)

    目录 1. 概述 2. S-record格式 3. S-record类型 4. S19文件示例 5. 校验和计算示例 6. 参考 1. 概述 Motorola S-record是由Motorola创建 ...

  8. S19文件和HEX文件解析

    目录 一.S19文件解析: 1.记录类型 2.长度计算 3.地址 4.数据 5.校验和及计算 二.HEX文件解析 1.记录类型 2.起始地址 3.数据长度 4.校验和 一.S19文件解析: S19文件 ...

  9. abs.s19文件_ABS 1.2:后台命令和导入文件的功能

    abs.s19文件 by Alex Nadalin 通过亚历克斯·纳达林 ABS 1.2:后台命令和导入文件的功能 (ABS 1.2: background commands & the ab ...

最新文章

  1. 专转本计算机应用基础,江苏省专转本计算机应用基础模拟题
  2. 2017 人工智能+内容生产研究报告【附下载】
  3. php 数组Array 删除指定键名值
  4. php post 500 ajax,php – Laravel 5:Ajax Post 500(内部服务器错误)
  5. ajax请求php的过程,php如何实现ajax请求
  6. 从数组里挑出仅仅出现一次的对象
  7. 公众号服务器配置url证书问题,公众号服务器配置url,验证token一直出错,为什么?...
  8. ORM框架之Mybatis(三)延迟加载、开启一二级缓存及使用注解增删改查
  9. 关闭计算机端口的命令行,关闭端口命令,小编教你如何关闭电脑80端口
  10. mount: 文件系统类型错误、选项错误、192.168.137.101:/data/wwwroot/pc 上有坏超级块
  11. 虚拟机是什么?有什么用
  12. [USACO10OCT]汽水机Soda Machine
  13. “时间都到哪里去了?”
  14. Mac下对小米8刷机Android8.1并安装Magisk和edXposed
  15. NOIP2014 飞扬的小鸟
  16. js动态添加带圆圈序号列表
  17. vscode虚拟环境运行文件报错ImportError: DLL load failed: 找不到指定的模块的问题
  18. 网页短信平台开发为什么要用短信服务程序
  19. android项目源码解析04:新浪微博客户端源码解析
  20. 在阿里云服务器上配置端口步骤

热门文章

  1. 一些故事让我们流眼泪( 二 )
  2. 精细化学品化学试题与答案
  3. Hello Kafka(八)——Confluent Kafka简介
  4. 2021-11-25 股票交易日志(5)
  5. 股票趋势线的绘制-维克托
  6. 两个进程,或者多个进程同时监听一个端口,邦定同一个端口,
  7. vue表情包公共组件(适用于聊天室)
  8. G1GC优化方案—官方原版
  9. 新版中日交流标准日本语初级第三课之基本课文I
  10. 【现身说法】玩游戏不如自己开发游戏