Embedded 用什么来填充可闪存图像?

Embedded 用什么来填充可闪存图像?,embedded,padding,firmware,Embedded,Padding,Firmware,愚蠢的问题。。。我正在缝合各个部分(内核、FS等),以创建一个固件映像,该映像将在NOR闪存上闪烁。现在我用零填充剩余的空间。使用其他填充有什么惯例/好处吗?出于几个原因,我更喜欢0xFF(在那些处于擦除状态的设备上) 写入闪存的速度会更快,因为不需要更改未使用的区域 某些设备对重新闪存循环的数量有限制。如果不必写,我宁愿不写 在许多设备上,如果该区域已被擦除,则无需经过擦除周期即可写入新数据。这很方便,尤其是当您编写的是数据而不是代码时。您可能不希望在不重新写入所有代码的情况下添加到代码中,

愚蠢的问题。。。我正在缝合各个部分(内核、FS等),以创建一个固件映像,该映像将在NOR闪存上闪烁。现在我用零填充剩余的空间。使用其他填充有什么惯例/好处吗?

出于几个原因,我更喜欢0xFF(在那些处于擦除状态的设备上)

  • 写入闪存的速度会更快,因为不需要更改未使用的区域
  • 某些设备对重新闪存循环的数量有限制。如果不必写,我宁愿不写
  • 在许多设备上,如果该区域已被擦除,则无需经过擦除周期即可写入新数据。这很方便,尤其是当您编写的是数据而不是代码时。您可能不希望在不重新写入所有代码的情况下添加到代码中,但您可能希望添加到存储在闪存中的参数数据中

我总是使用零。只需确保保持一致,因为您需要校验和/CRC,以确保没有出现任何错误。我使用的大多数擦除设备都是1 0xFF,尽管在10-20年后,我终于遇到了带零擦除设备。它不应该真的在大计划的事情,地方,它会你可能没有处理。如前所述,如果您有校验和,大多数都会确保填充足够深。有一个地方可能会有所帮助,例如所有的都是无效的ARM指令,我没有研究其他指令集。因此,如果您的代码游离到闪存的这个区域(如果在您的环境中这是可能的),那么如果它是ARM,它将转到未定义的指令。所有零(取决于arm指令集)都是有效的指令,因此它将运行到闪存的末尾或填充、闪存或环绕的末尾。可能不会造成任何伤害,但第一次获取时未定义的可能有助于调试。YMMV与其他体系结构/ISA。毫无疑问,擦除状态是技术的擦除状态的原因。如果您使用该部件的擦除状态,则理想情况下,位不会改变。但是,您可能希望与擦除状态相反,使用crc来查看是否有任何位衰减/擦除,现在失败,而不是将来某一天固件升级或更多数据使用该空间。“尽管如此,”老家伙说得很好。