RTOS的内存映射

时间:2012-03-02 06:20:25

标签: embedded rtos

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

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

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

链接器和链接描述文件确定内存映射,您的链接器将能够输出描述应用的布局和分配的地图报告文件。无论是操作系统还是体系结构,嵌入式和桌面应用程序都是如此。

答案 2 :(得分:2)

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

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

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

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

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

答案 3 :(得分:0)

内存映射是系统内存的布局。它存在于嵌入式系统和普通应用程序中。虽然它存在于普通应用中,但由于系统限制,它在嵌入式系统中的使用非常受欢迎。

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

对于嵌入式系统,基于内存配置或电路板和性能要求的限制,文本段或数据段或BSS等段也可以放置在适当的存储器中。

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

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

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

相关问题