【发布时间】:2013-04-27 02:32:22
【问题描述】:
我需要创建一个提供一些功能的 ROM 掩码。但是,应该可以覆盖提供固件补丁的功能。因此,补丁表应该位于闪存中,可能会被以后的固件升级覆盖,而固件的主要部分位于掩码ROM中,以后无法修改。
有人知道这是怎么做到的吗?创建补丁表的最佳实践是什么?
【问题讨论】:
-
您需要提供比这更多的信息。 (例如:您在谈论什么设备等)请更新您的问题并添加相关标签。
我需要创建一个提供一些功能的 ROM 掩码。但是,应该可以覆盖提供固件补丁的功能。因此,补丁表应该位于闪存中,可能会被以后的固件升级覆盖,而固件的主要部分位于掩码ROM中,以后无法修改。
有人知道这是怎么做到的吗?创建补丁表的最佳实践是什么?
【问题讨论】:
补丁表 - 基本上,您的 ROM 有一个内置跳转到内置的 RAM(闪存)地址。在您的 ROM 跳转调用返回到您的原始代码之后,闪存总是有某种跳转回位置。您现在可以从 RAM 更改程序的行为。这假设您当然可以从 RAM 运行代码。如果没有,则只能动态更改数据表。
现在,只需在启动时进行一次跳转,您就可以修改启动状态代码,例如版本号或其他全局/常量数据,但这可能还不够。您可以添加另一个跳转到闪存,该跳转也“经常”运行到您的代码中,以便它可以在运行后更新程序状态 - 例如一次 vblank 或一次应用程序循环。
以上内容应该为您提供了足够的余地来更改自发布以来随时间变化的数据,或者可能修复一个轻微的逻辑错误,但它不允许您全面更改功能。为此,您需要更多代码。更多的代码取决于您可以使用多少 RAM。
例如,如果您有足够的 RAM,并且从 Flash RAM 运行不会对性能造成太大影响(并且是允许的),您可以通过在启动时将所有关键 ROM 功能复制到 RAM 中,然后调用上面描述的 RAM 补丁跳转,这将允许存储在 RAM 补丁中其他位置的新代码覆盖任何以前复制的代码。如果您采用这种方法,您还需要确保在原始函数周围留出一些额外的空间,以允许新的填充函数有一点增长空间。要复制到 RAM 的原始代码也可以压缩存储以节省 ROM 空间。这使您可以在事后更改任何内容。如果允许其他内容写入 RAM,它还介绍了一种非常简单的方法来利用您的代码,所以要小心。
希望这会有所帮助。
【讨论】: