Assembly 嵌入式系统中的复位处理

Assembly 嵌入式系统中的复位处理,assembly,linker,embedded,interrupt,interrupt-handling,Assembly,Linker,Embedded,Interrupt,Interrupt Handling,我被要求为嵌入式系统开发引导加载程序。 引导加载程序的主要功能是执行应用程序 通常,在没有引导加载程序的情况下,应用程序的内存组织相当简单: 0x00 Reset 0x00000004 intrreupt vector 0x00000400 application. 现在,一旦引导加载程序出现,我必须移动内存区域,所以引导加载程序代码将从底部开始: 0x00 Reset 0x00000004 bootloader interrupt vector 0x00000200 bootloader c

我被要求为嵌入式系统开发引导加载程序。 引导加载程序的主要功能是执行应用程序

通常,在没有引导加载程序的情况下,应用程序的内存组织相当简单:

0x00 Reset
0x00000004 intrreupt vector
0x00000400 application.
现在,一旦引导加载程序出现,我必须移动内存区域,所以引导加载程序代码将从底部开始:

0x00 Reset
0x00000004 bootloader interrupt vector
0x00000200 bootloader code
0x00001000 application code.
现在让我们进入问题: 若引导加载程序执行正确的跳转,应用程序将被执行,那个么一旦重置发生,将会发生什么?应用程序是否需要有自己的重置处理程序,例如只跳转到
0x00
地址

我对这种复位处理有点困惑,正确的处理方法是什么

谢谢,
J.

将只有一个重置向量。在所有重置之后,引导加载程序将重新启动。如果应用程序想要重置并以执行控制结束,引导加载程序必须将控制权转移给应用程序


复位不是跳转到复位向量,而是核心寄存器由硬件重新初始化,程序计数器指向复位地址

将只有一个重置向量。在所有重置之后,引导加载程序将重新启动。如果应用程序想要重置并以执行控制结束,引导加载程序必须将控制权转移给应用程序


复位不是跳转到复位向量,而是核心寄存器由硬件重新初始化,程序计数器指向复位地址

体系结构在具体细节上可能有所不同,但即使应用程序和引导加载程序具有独立的向量表,重置的效果也包括将向量表地址重置为默认地址,因此只有一个重置向量


有关特定处理器或体系结构的详细信息,请参阅参考手册。它将包括所有寄存器和外围设备的重置状态。

体系结构可能在精确细节上有所不同,但即使应用程序和引导加载程序具有独立的向量表,重置的效果也包括将向量表地址重置为默认地址,因此只有一个重置向量


有关特定处理器或体系结构的详细信息,请参阅参考手册。它将包括所有寄存器和外围设备的重置状态。

您使用的是什么硬件/核心?解释冷重置和热重置的不同之处。或者这就是你的问题?(除非您谈论的是中断(计时器/wdt/etc)而不是实际重置,否则它们不会/不应该有所不同。)我有rh850。在应用程序代码中,我看到了我删除的重置处理程序,因为重置是由引导加载程序处理的。但是我还不确定是否有必要删除这个reset,这就是我问的原因。你使用的是什么硬件/核心?解释一下你的冷重置和热重置有什么不同。或者这就是你的问题?(除非您谈论的是中断(计时器/wdt/etc)而不是实际重置,否则它们不会/不应该有所不同。)我有rh850。在应用程序代码中,我看到了我删除的重置处理程序,因为重置是由引导加载程序处理的。但我还不确定是否有必要删除此restet,这就是我问的原因。你的最后一段对大多数更现代的CPU都不正确。@tofro请提供更多信息,我肯定想知道更多。大多数现代的CPU不会在重置时将程序计数器重置为零。大多数现代CPU甚至不希望可执行代码位于零地址。相反,它们要么在重置时跳转到固定(其他)地址,要么真正跳转到重置向量中指定的地址。x86 CPU通常跳转到地址范围上端的地址,大多数ARMs、SPARC、MIPS和Power CPU使用重置向量中的地址。@tofro True,但它与机制基本相同。大多数处理器从硬件初始化的固定地址向量启动。我使用了零,因为这就是问题所在。正如你所说,“指向零地址的程序计数器”意味着“代码从0开始”。您可能想说“程序计数器是从地址零初始化的”(这至少对某些CPU(如68k)是正确的),您的最后一段对大多数更现代的CPU是不正确的。@tofro请提供更多信息,我肯定想知道更多。大多数现代CPU不会在重置时将程序计数器重置为零。大多数现代CPU甚至不希望可执行代码位于零地址。相反,它们要么在重置时跳转到固定(其他)地址,要么真正跳转到重置向量中指定的地址。x86 CPU通常跳转到地址范围上端的地址,大多数ARMs、SPARC、MIPS和Power CPU使用重置向量中的地址。@tofro True,但它与机制基本相同。大多数处理器从硬件初始化的固定地址向量启动。我使用了零,因为这就是问题所在。正如你所说,“指向零地址的程序计数器”意味着“代码从0开始”。您可能想说“程序计数器是从地址零初始化的”(这至少对某些CPU(如68k)是正确的)