我期待着了解内存映射在嵌入式系统中的作用。这里的函数栈与普通的unix系统有什么不同?
任何可以帮助我调试嵌入式系统内存相关崩溃的见解都将是有帮助的。
发布于 2012-03-02 14:46:32
嵌入式系统,特别是实时系统,通常具有大量静态分配的数据,和/或存储在存储器中特定位置的数据。内存映射告诉您这些东西在哪里,当您遇到问题并需要检查系统状态时,这会很有帮助。例如,您可能会转储所有内存,然后在事后对其进行分析;在这种情况下,内存映射对于查找您怀疑可能与问题相关的对象将非常方便。
在代码方面,您的系统可能会记录一个硬件异常,该异常指向检测到异常的指令地址。查找函数的内存位置,结合函数的反汇编,可以帮助您分析此类问题。
细节实际上取决于您正在构建的嵌入式系统的类型。如果你提供更多细节,人们可能会给出更好的回应。
发布于 2012-03-03 16:47:03
我不确定我是否理解了这个问题。您似乎在暗示“内存映射”是嵌入式系统独有的东西,或者它是一个有形的软件组件。它两者都不是;它仅仅是对应用程序内存使用布局的描述。
无论平台如何,所有应用程序都将具有内存映射,不同之处在于,通常在嵌入式系统上,应用程序被链接为单个整体实体,因此所产生的内存布局是指整个系统,而不是像它在GPOS平台上的应用程序中可能涉及的单个进程。
链接器和链接器脚本确定内存映射,并且链接器将能够输出描述所应用的布局和分配的映射报告文件。无论操作系统或架构如何,嵌入式和桌面应用程序都是如此。
发布于 2012-03-08 06:22:12
RTOS的内存映射与任何计算机的内存映射没有太大不同。它定义了哪些硬件驻留在处理器的哪些地址上。该硬件可以是RAM、ROM、闪存、串行端口、并行端口、定时器、中断向量或处理器可寻址的任意数量的其他部件。
内存映射还描述了如何在系统设计中为有限的资源(如RAM、ROM或Flash )进行预算。
例如,如果有多个任务在运行,则可以映射RAM,以便每个任务都有自己的特定RAM区域分配给它。
反过来,每个任务的RAM部分将被映射,以便有特定的堆栈区域,另一个区域用于静态变量,可能还有更多区域用于堆。
当你在目标上有一个操作系统时,它会动态地处理很多这样的事情。但是,如果您的应用程序是设备上唯一的软件,您将不得不自己管理这些决策,通常是在编译/链接时。搜索“链接脚本”寻找进一步的线索,
https://stackoverflow.com/questions/9528937
复制相似问题