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

时间:2011-09-27 12:39:50

标签: c linker embedded

当我编译我的代码时,我最终会得到Motorola S records a.mot )并且存在间隙(整个地址范围不包含在代码和数据中)。

我想用模式0x01 0x80填补这些空白。但是,重要的是所有双字节对必须从偶数地址开始。 0x0180是我的micro中的操作码,如果PC到达未使用的闪存区域的地址,我想要执行。

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

  • 给出两个部分,例如 C D 在地址空间中一个接一个地放置( D C 之后)。
  • 鉴于 C 部分的最后一个字节在地址0x76上结束,部分 D 的第一个字节在地址0x78上。换句话说,它们之间的地址0x77有1个字节的长间隙。

在这种情况下,如果我使用 -repeat-data 0x01 0x80 选项,则srec cat会使用0x01填充该一个字节并开始填充{{1 }}

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

2 个答案:

答案 0 :(得分:3)

使用srec_cat创建一个文件,覆盖所需的地址范围,完全填充0x01 0x80序列,并根据需要进行对齐。

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

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

答案 1 :(得分:3)

我会在Windows中编写一个简单的解析器,如下所示:

  • 程序根据您从编译器获得的文件创建一个新的s-record文件。
  • 循环生成的文件,一次读取两条s记录行。
  • 如果该行是信息行,S0,S9,S5等,只需将其写入新文件即可。
  • 如果第1行的地址+尺寸小于第2行的地址,则表示您找到了间隙。 (address1 + size1)<地址2。
  • 将第1行写入新文件。
  • 如果找到间隙,请写一条带有间隙常数S1xx01800180的线,依此类推。随时计算校验和。
  • 将第2行写入新文件。