0

我期待了解内存映射在嵌入式系统中的用途。这里的函数堆栈与普通的 unix 系统有何不同。

任何可以帮助我调试嵌入式系统内存相关崩溃的见解都会有所帮助。

4

4 回答 4

4

嵌入式系统,尤其是实时系统,通常有大量静态分配的数据,和/或放置在内存中特定位置的数据。内存映射告诉您这些东西在哪里,这在您遇到问题并需要检查系统状态时会很有帮助。例如,您可能会转储所有内存,然后在事后对其进行分析;在这种情况下,内存映射将非常方便地查找您怀疑可能与问题相关的对象。

在代码方面,您的系统可能会记录一个硬件异常,该异常指向检测到异常的指令地址。查找函数的内存位置,结合函数的反汇编,可以帮助您分析此类问题。

细节实际上取决于您正在构建什么样的嵌入式系统。如果您提供更多详细信息,人们可能会给出更好的回应。

于 2012-03-02T06:46:32.317 回答
2

我不确定我是否理解这个问题。您似乎在暗示“内存映射”是嵌入式系统独有的东西,或者它是有形的软件组件。两者都不是;它只是对应用程序内存使用布局的描述。

无论平台如何,所有应用程序都将具有内存映射,不同之处在于通常在嵌入式系统上,应用程序链接为单个整体实体,因此最终的内存布局指的是整个系统,而不是可能的单个进程GPOS 平台上的应用程序。

决定内存映射的是链接器和链接器脚本,您的链接器将能够输出一个映射报告文件,描述应用的布局和分配。无论操作系统或架构如何,嵌入式和桌面应用程序都是如此。

于 2012-03-03T08:47:02.580 回答
2

RTOS 的内存映射与任何计算机的内存映射没有太大区别。它定义了哪些硬件驻留在处理器的哪个地址。该硬件可以是 RAM、ROM、闪存、串行端口、并行端口、定时器、中断向量或处理器可寻址的任何数量的其他部分。

内存映射还描述了您打算如何为系统设计中的 RAM、ROM 或闪存等有限资源进行预算。

例如,如果有多个任务正在运行,则可能会映射 RAM,以便每个任务都有自己的特定 RAM 区域分配给它。

反过来,每个任务的 RAM 部分将被映射,以便有特定区域用于堆栈,另一个用于静态变量,也许还有更多用于堆。

当你在目标上有一个操作系统时,它会动态地处理很多这样的事情。但是,如果您的应用程序是设备上唯一的软件,则您必须自己管理这些决定,通常是在编译/链接时。搜索“链接脚本”以获取更多线索,

于 2012-03-07T22:22:11.707 回答
0

内存映射是系统内存的布局。它存在于嵌入式系统和普通应用程序中。虽然它存在于普通应用程序中,但由于系统限制,它在嵌入式系统中的使用得到了很好的认可。

内存映射通过链接器脚本或链接器命令文件进行管理。它映射资源,如闪存或内部 RAM(L1P、L1D、L2、L3)或外部 RAM(DDR)或 ROM 或外围设备(端口、串行、并行、USB 等)或特定设备寄存器或具有适当固定地址的 I/O 端口在系统的内存空间中。

在嵌入式系统的情况下,根据内存配置或板卡和性能要求的限制,文本段或数据段或 BSS 等段也可以放置在选择的适当内存中。

在某些情况下,不同版本的开发板会有不同的内存和外设配置。在这种情况下,我们可能需要根据电路板的内存配置和外围设备编辑链接器脚本,作为电路板启动中的一个重要检查点。

内存映射也可以帮助定义共享内存,这可以在多线程应用程序和多核应用程序中发挥关键作用。

可以通过回溯崩溃的地址并将其映射到系统的内存来调试崩溃,以获得对可能导致问题的库或对象的高级概念。

于 2014-09-18T18:18:58.457 回答