如何使用从偶数地址边界开始的两个字节值填充 S 记录?

发布于 2024-12-06 14:51:26 字数 852 浏览 1 评论 0原文

当我编译代码时,我最终得到 Motorola S 记录 (a. mot),有间隙(整个地址范围不被代码和数据覆盖)。

我想用模式 0x01 0x80 来填补这些空白。然而,重要的是所有两字节对必须从偶数地址开始。 0x0180 是我的微控制器中的一个操作码,如果 PC 到达未使用的闪存区域的地址,我希望执行该操作码。

在您开始回答之前,我想告诉您 srec_cat 中的 -repeat-data 有一个问题:

  • 给定两个部分,例如 C 和 < strong>D 在地址空间中依次放置(DC 之后)。
  • 假设 C 部分的最后一个字节以地址 0x76 结束,而 D 部分的第一个字节位于地址 0x78 处。换句话说,它们之间的地址 0x77 处有 1 个字节长的间隙。

在这种情况下,如果我使用 -repeat-data 0x01 0x80 选项,srec cat 将用 0x01 填充该一个字节,并开始填充以下间隙来自0x80

我不知道这些部分的大小,因为链接器会处理它。

When I compile my code I eventually get Motorola S records (a.mot) with gaps (the whole address range is not covered by code and data).

I want to fill those gaps with the pattern 0x01 0x80. However, it is important that all of the two-byte pairs must start at even addresses. 0x0180 is an opcode from my micro that I want to be executed if the PC reaches an address of unused flash area.

Before you start answering I'd like to tell you that -repeat-data in srec_cat has an issue:

  • Given two sections e.g. C and D put one after another (D after C) in address space.
  • Given that last byte of section C ends on address 0x76 and first byte of section D is on address 0x78. In other words there is 1 byte long gap at address 0x77 between them.

Under such conditions, if I use -repeat-data 0x01 0x80 option, srec cat will fill that one byte with 0x01 and start filling following gap from 0x80.

I do not know sizes of those sections because linker handles it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

允世 2024-12-13 14:51:26

使用 srec_cat 创建一个覆盖所需地址范围的文件,该文件完全填充有按要求对齐的 0x01 0x80 序列。

然后使用 srec_cat 以及 -multiple−disable-sequence-warning 选项将“填充器”文件与应用程序映像文件“合并”。您应该将填充文件指定为第一个文件,以便它被第二个指定的应用程序数据覆盖。

它会发出许多警告,但它应该有效。

Use srec_cat to create a file covering your required address range filled entirely with the 0x01 0x80 sequence aligned as required.

Then use srec_cat with the -multiple and −disable-sequence-warning options to "merge" the "filler" file with your application image file. You should specify the filler file as the first file so that it is overwritten by the application data specified second.

It will issue many warnings, but it should work.

猫腻 2024-12-13 14:51:26

我会在 Windows 中编写一个简单的解析器,工作方式如下:

  • 该程序根据从编译器获得的文件创建一个新的 s-record 文件。
  • 循环生成的文件并一次读取两行 s-record。
  • 如果该行是信息行,S0、S9、S5 等,只需将其写入新文件即可。
  • 如果第 1 行的地址 + 大小小于第 2 行的地址,则您发现了一个间隙。 (地址1 + 大小1) <地址2。
  • 将第 1 行写入新文件。
  • 如果发现间隙,请写一行包含间隙常数 S1xx01800180 等。边走边计算校验和。
  • 将第 2 行写入新文件。

I would write a simple parser in Windows working like this:

  • The program creates a new s-record file based on the one you got from the compiler.
  • Loop through the generated file and read two s-record lines at a time.
  • If the line is an information line, S0, S9, S5 etc, just write it to the new file.
  • If line 1 has an address + size smaller than the address on line 2, you have found a gap. (address1 + size1) < address2.
  • Write line 1 to the new file.
  • If you found a gap, write a line with your gap constants S1xx01800180 and so on. Calculate the checksum as you go.
  • Write line 2 to the new file.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文