1
电子说
许多应用程序需要从 RAM 中执行代码,例如出于安全原因或例如在引导加载程序用于闪存自编程的情况下。通常这样的应用程序必须分为两部分:
将从闪存执行的主要部分。这部分代表主要应用程序,例如引导加载程序
主应用程序中的图像将在运行时复制到 RAM
软件概念
考虑到上述概念,开发需要考虑几个问题:
如何创建将存储在闪存中但在运行时从 RAM 执行的应用程序?
如何调试在不同项目中构建的应用程序?
公共资源
两个应用程序的分离需要如何处理公共资源,例如 RAM。
RAM
– 堆栈和堆定义(两个应用程序一个堆栈和一个堆;每个应用程序单独的堆栈)
– SADDR 和数据 RAM 应根据应用程序要求进行分区
选项字节
——选项字节将在应用程序之一中定义。此选项字节中的所有配置(例如看门狗)应对两个应用程序都有效,因为它不能在运行时更改
中断
——通过使用自编程库,可以对 RAM 中的所有中断使用通用中断服务程序
下图说明了两个应用程序的内存映射。这里堆栈用作两个应用程序的公共资源。
两个应用程序的内存映射(ROM、RAM)
创建一个从 RAM 执行的应用程序
本章介绍如何设置一个应用程序,该应用程序将通过主应用程序闪存中的映像加载并从 RAM 执行。请注意,以下描述的配置基于两个应用程序的一个公共堆栈。
内存映射
由于 RAM 中的应用程序是独立应用程序,因此必须相应地定义编译器/汇编器使用的所有标准段,如 RCODE、XCODE、FAR_I、FAR_CONST 等。与普通应用程序相比的不同之处在于,该应用程序将从 RAM 而非闪存执行。这意味着这些段最初位于图像(闪存)中,稍后将逐段复制到 RAM 并从那里执行。请注意,如果应用程序有多个片段,则无法直接复制整个图像。
这样做的原因是图像中的段位置可能与 RAM 中的位置不同,因此必须逐段复制所有段。由于应用程序将从 RAM 中执行,因此必须通知链接器该段将放置在闪存中,但从 RAM 中执行。这可以通过将在下一章中介绍的链接器功能“分散加载”来完成。
编辑:hfy
全部0条评论
快来发表一下你的评论吧 !