关于编译十六进制文件设置的咨询

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,我发现ADS编译器编译的十六进制文件具有不连续且非常不规则的数据地址(如下图所示)。 可以使用哪些设置来使这些数据的地址紧凑而连续?

Anony_0-1706157301234.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Consultation-on-Compiling-Hex-File-Settings/td-p/683198

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

当应用程序代码/const 数据放置位置存在间隙时,生成的十六进制或 SREC 文件中总会有间隙。 默认情况下,链接器不会填补这些空白。 可以通过调整 LSL 文件来做到这一点。 如果您为所有 ROM 部分定义群组并对这些组应用 fill= 条目,则链接器将使用填充值填充所有未使用的范围。

一种更简单的方法是改用 SRecord 工具对生成的十六进制或 SREC 文件进行后处理,因为这也可以添加所需的填充值。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Consultation-on-Compiling-Hex-File-Settings/m-p/684961

在原帖中查看解决方案

0 点赞
3 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

不幸的是,没有链接器选项可以让链接器按升序创建十六进制文件。 十六进制格式使用 “04” 记录来指定地址的上半字,然后指定 64kB 的地址偏移量条目(小字的地址范围)。 例如。

:0200000480007A: 2000000000000007000700059B300000000000000000000000000000000000064B81E799B47E18668:14002000910000F8D9FFA200DC0F00F0000000000000000A03CF73

第一个条目是用于指定起始地址的 “04” 记录,即 0x80000000,第二行和第三行是代码/常量数据的数据条目。

:200000000

表示 0x20 字节的数据,从 0x80000000 的偏移量 0x0000 开始,最后一个字节为 00,表示这是一条数据记录。

:14002000

表示 0x14 字节的数据,从 0x80000000 的偏移量 0x0020 开始

默认情况下,未填充未使用的范围。 如果你需要这个,你可以考虑使用像 sRecord (https://srecord.sourceforge.net) 这样的工具对生成的十六进制文件进行后处理。

如果您不需要填充未使用的区域,而只需要按升序排列的十六进制文件,则可以考虑让链接器另外创建一个 SREC 文件。 这是按升序排列的。 要实现此目的,你需要添加条目:

-wl-otc39x_test.sre: SREC

在 “其他任务” 菜单中。在此示例中,tc39x_Test 是项目的名称。

User13836_0-1706191633087.png

 

最诚挚的问候,

Ulrich Kloidt 任务工具支持

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Consultation-on-Compiling-Hex-File-Settings/m-p/683756

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

谢谢。那么我想知道地址中有这么多不连续的地方的原因?
另外,我试过生成它生成SREC文件的方法似乎不成功,如果可以的话,SREC的文件会有连续的地址吗?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Consultation-on-Compiling-Hex-File-Settings/m-p/684485

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

当应用程序代码/const 数据放置位置存在间隙时,生成的十六进制或 SREC 文件中总会有间隙。 默认情况下,链接器不会填补这些空白。 可以通过调整 LSL 文件来做到这一点。 如果您为所有 ROM 部分定义群组并对这些组应用 fill= 条目,则链接器将使用填充值填充所有未使用的范围。

一种更简单的方法是改用 SRecord 工具对生成的十六进制或 SREC 文件进行后处理,因为这也可以添加所需的填充值。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Consultation-on-Compiling-Hex-File-Settings/m-p/684961

0 点赞