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

C 如何使用从偶数地址边界开始的两个字节值填充S记录?,c,linker,embedded,C,Linker,Embedded,当我编译代码时,我最终得到(a.mot)带有间隙(代码和数据不包括整个地址范围) 我想用模式0x01 0x80来填补这些空白。但是,重要的是,所有两个字节对必须从偶数地址开始0x0180是来自我的micro的操作码,如果电脑到达未使用闪存区的地址,我希望执行该操作码 在开始回答之前,我想告诉您,srec_cat中的重复数据有一个问题: 给定两个部分,例如C和D在地址空间中依次放置(D在C之后) 假定C段的最后一个字节在地址0x76上结束,而D段的第一个字节在地址0x78上。换句话说,它们之间的

当我编译代码时,我最终得到(a.mot)带有间隙(代码和数据不包括整个地址范围)

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

在开始回答之前,我想告诉您,srec_cat中的重复数据有一个问题:

  • 给定两个部分,例如CD在地址空间中依次放置(DC之后)
  • 假定C段的最后一个字节在地址
    0x76
    上结束,而D段的第一个字节在地址
    0x78
    上。换句话说,它们之间的地址
    0x77
    处有1字节长的间隙
在这种情况下,如果我使用-repeat data
0x01 0x80
选项,srec cat将用
0x01
填充该字节,并从
0x80
开始填充以下间隙

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

用于创建一个文件,该文件覆盖您所需的地址范围,并根据需要完全填充0x01 0x80序列

然后将srec_cat与
-multiple
−禁用序列警告
选项以将“填充”文件与应用程序映像文件“合并”。您应该将填充文件指定为第一个文件,以便第二个指定的应用程序数据覆盖它


它将发出许多警告,但应该可以工作。

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

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

就我个人而言,我会用一个名为post-link步骤的快速Python脚本来解决这个问题。我想到了,但还没有尝试过。我来试一试这个解决方案。s19格式是否要求行按地址顺序排列?@Sam Skuce我不确定是否确实需要它,但我见过的每个工具都将它们按地址顺序排列,尤其是链接器。如果您想100%确定始终可以先对行进行排序,然后应用上述算法。