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