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

当我编译我的代码时,我最终获得了带有间隙的摩托罗拉S记录 ( a.mot )(整个地址范围不包含在代码和数据中)。

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

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

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

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

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

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

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

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

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

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