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

news2024/11/7 7:51:43

案例背景(共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 off

Rem 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博客“汽车电子助手”,做您的好助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot统一功能的处理

目录 SpringBoot拦截器 自定义拦截器 将自定义拦截器加入系统配置项 统一异常处理 创建异常处理类 实现业务方法 统一数据返回格式 为什么需要统一数据返回格式 统一数据返回格式的实现 返回String时的报错愿意及处理方案 SpringBoot拦截器 使用SpringBoot拦截器来实现…

Figma文件保存图片教程,4个详细步骤一网打尽!

在设计领域中,Figma 作为一款备受欢迎的在线协同设计软件,给设计师们带来了许多便利。然而,Figma 目前并不能直接保存图片。那么,有没有什么方法可以解决这个问题呢?答案是使用「即时设计」,这是一款国产的…

Git初始化提交项目代码并与远端建立连接

如题 闲来无事,炒个冷饭。。。 步骤 1. 先本地建仓库 方法一: 执行命令(使用git bash或者类似工具,或者IDEA下terminal命令行): git init会在当前目录下创建一个新的空Git库。 方法二: 在…

JDBC API 万字详解(通俗易懂)

目录 一、前言 二、JDBC API概述 三、获取连接的三种方式 0.朝花夕拾 : 1.方式一 —— 通过new关键字 : 2.方式二 —— 通过反射机制 : 3.方式三 —— 通过DriverManager Δ方式三简化版 Δ方式三优化版 四、 ResultSet 1.简介 : 2.代码演示 : 3.底层实现 : 五、SQL…

20分钟搞定 Stable Diffusion 模型在线服务部署

文章目录 AIGC之 AI 绘画20分钟搞定 Stable Diffusion 模型在线服务部署认识 Amazon SageMaker借助 Amazon SageMaker 进行环境搭建和模型推理1. 创建 jupyter notebook 运行环境2. 一键运行所有代码 关键代码分析如下1. 环境准备,代码模型下载2. 在Notebook中配置并…

Next 主题配置

当前用得最多的是next主题,那为什么用得多呢?当然是符合大多数人的审美。我使用的是next(v7.8.0),下载地址:theme-next/hexo-theme-next 1 基本设置 1.1 主题设置 打开博客根目录 Blog 文件夹,右键 Git Bash&#xf…

制作投票链接怎么做微信上投票连接怎么样做投票链接

关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。 我们现在要以“小手绘盛夏”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星投票…

RuoYi-Cloud本地运行

启动nacos bin目录打开cmd,输入startup.cmd -m standalone,单机模式启动 http://localhost:8848/nacos/ 用户名密码都是nacos 启动redis 在 D:\Redis-x64-3.2.100 目录下 按shift鼠标右键,打开powerShell,输入 .\redis-server…

2023最新版本Activiti7系列-流程变量

流程变量 流程变量可以用将数据添加到流程的运行时状态中,或者更具体地说,变量作用域中。改变实体的各种API可以用来更新这些附加的变量。一般来说,一个变量由一个名称和一个值组成。名称用于在整个流程中识别变量。例如,如果一个…

在 Android 上恢复已删除的通话记录 - 安卓手机通话记录恢复技巧

有时,Android 用户会在内存空间用完时删除他们的通话记录。他们认为那些电话通话记录将不再需要了,但突然出于某些原因他们需要恢复那些已删除的通话记录。 恢复已删除的照片、视频、音乐、短信和通话记录等数据在以前是一件很难的事情。但是现在如果你…

# 蓝牙音频相关知识

蓝牙音频相关知识 文章目录 蓝牙音频相关知识1 音频源2 蓝牙音频编解码器3 一些标准4 蓝牙音频其他相关知识4.1 蓝牙版本4.2 ANC(主动降噪)4.3 音响相关参数4.4 音质评价4.5 HI-Fi声音特点4.6 耳机线材4.7 耳机分类4.8 IP防尘防水等级4.9 噪音与量化噪音…

如何用Python语言调取百度翻译的API

诸神缄默不语-个人CSDN博文目录 本文介绍如何用Python语言调用百度翻译的API服务。 理论上类似的写法也可以应用于其他语言。 http://api.fanyi.baidu.com/manage/developer可以注册开发者,或者APP ID和秘钥;然后还可以进行开发者认证,获得…

ajax-1--XML、AJAX简介、express框架使用、AJAX操作的基本步骤

一、XML(可扩展标记语言) XML与HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据。 比如有一个学生数据:name“孙悟空”;age18;gender“男”&a…

【Python实战】Python采集大学教务系统成绩单

前言 在现代教育中,教务系统已经成为了学校管理和教学工作的重要组成部分。然而,由于各种原因,教务系统的成绩单并不能下载的,这给我们带来了很多不必要的麻烦和困扰。因此,采集教务系统成绩单的项目具有非常重要的意义…

【轻量化网络系列(6)】EfficientNetV1论文超详细解读(翻译 +学习笔记+代码实现)

前言 EfficientNetV1是Google在2019年发布的文章,这篇论文最主要的创新点是Model Scaling。论文提出了compound scaling,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从…

使用FPGA驱动GS2972(3G-SDI模式)外同步(HSYNC VSYNC DE)或内(BT1120)同步输出彩条调试

GS2972视频输出调试 一、外同步模式1.1 GS2972的硬件初始化1.2 GS2972的驱动时序1.3 GS2972的驱动RTL代码1.4 GS2972输出彩条1.5 GS2972驱动易出bug二、数据内嵌同步模式2.1 GS2972的硬件初始化2.2 GS2972的驱动时序2.3 GS2972的驱动RTL代码2.4 GS2972输出彩条2.5 GS2972驱动易…

IIC总线简介及IIC的通信过程与时序

1.IIC总线简介 IIC总线: IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线,主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟…

跳槽一次涨8k,5年跳了3次...

最近有人说,现在软件测试岗位初始工资太低了,有些刚刚入行的测试朋友说自己工资连5位数都没有…干了好几年也没怎么涨。 看看别人动辄月薪1-2万,其实我想说也没那么难。 说下如何高效地拿到3万的工资,总体来说,就靠跳…

墨天轮关系型分布式数据库榜单解读

分布式关系型数据库概述 作为数据库演进方向之一,分布式能力受到更多用户的关注。从技术架构演进来看,数据库正走过了从单机式、集中式到分布式的发展过程,目前是多种架构并存的阶段。分布式架构以其更好的存储与计算扩展能力,受…

四六位、不定长、计算题等验证码,一款工具全部搞定,简单方便还开箱即用,精度高达96%!!

四六位、不定长、计算题等验证码,第三方平台准确率低,自己不会神经网络训练,嫌麻烦,一款工具全部搞定,开箱即用!! 本文秉承着开箱即用的原则,真正做到一款工具识别秒杀所有单行文本验证码,这里的单行指的就是某张4位6位或者计算题或者文字的验证码,我是使用了4位+6位…