当前位置:数码通 > 电脑

浅谈RAM执行应用

来源于 数码通 2023-10-05 14:53

许多应用程序需要从RAM执行代码,例如出于安全原因,或者例如在引导加载程序用于闪存自编程的情况下。通常这样的应用程序必须分为两部分:

主要部分将从闪存执行。这部分代表主要应用程序,例如引导加载程序

主应用程序中的图像将在运行时复制到 RAM

软件概念

综合以上概念,开发中需要考虑几个问题:

如何创建一个存储在闪存中但在运行时从 RAM 执行的应用程序?

如何调试在不同项目中构建的应用程序?

公共资源

两个应用程序的分离需要如何处理公共资源(例如 RAM)。

内存
– 堆栈和堆定义(两个应用程序一个堆栈和一个堆;每个应用程序单独的堆栈)
– SADDR 和数据 RAM 应根据应用要求进行分区

选项字节
- 选项字节将在其中一个应用程序中定义。此选项字节中的所有配置(例如看门狗)对于两个应用程序都应该有效,因为它无法在运行时更改

中断
——通过使用自编程库,可以对RAM中的所有中断使用通用中断服务程序

下图说明了两个应用程序的内存映射。该堆栈充当两个应用程序的公共资源。

两个应用程序的内存映射(ROM、RAM)

创建从 RAM 执行的应用程序

本章介绍如何设置将从主应用程序闪存中的映像加载并从 RAM 执行的应用程序。请注意,下面描述的配置基于两个应用程序的公共堆栈。

内存映射

由于 RAM 中的应用程序是独立的应用程序,因此编译器/汇编器 使用的所有标准部分(如 RCODE、XCODE、FAR_I、FAR_CONST 等)都必须相应地定义。与普通应用程序的区别在于应用程序将从 RAM 而不是闪存执行。这意味着这些段最初位于映像(闪存)中,随后将逐段复制到 RAM 并从那里执行。请注意,如果应用程序有多个片段,则无法直接复制整个图像。

原因是图像中的段位置可能与 RAM 中的位置不同,因此必须逐段复制所有段。由于应用程序将从 RAM 执行,因此必须通知链接器该部分将放置在闪存中,但从 RAM 执行。这可以通过链接器功能“分散加载”来完成,该功能将在下一章中介绍。

编辑:hfy

-->
登录后参与评论