我被要求处理嵌入式系统的bootloader程序。 bootloader的主要功能是执行应用程序。
通常,如果没有bootloader,应用程序的内存组织就相当简单了:
0x00 Reset
0x00000004 intrreupt vector
0x00000400 application.
现在,一旦bootloader apper,我必须移位内存区域,所以bootloader代码将从底部开始:
0x00 Reset
0x00000004 bootloader interrupt vector
0x00000200 bootloader code
0x00001000 application code.
现在让我们回答一下问题:
如果bootloader执行正确的跳转并且将执行应用程序,那么重置后会发生什么?应用程序是否需要拥有自己的重置处理程序,例如,它只会跳转到0x00
地址?
我对这种重置处理感到困惑,处理它的正确方法是什么。
感谢, 学家
答案 0 :(得分:0)
只有一个复位向量。完成所有重置后,将重新启动引导加载程序。如果应用程序想要重置并最终执行控制,则引导加载程序必须将控制转移到应用程序。
复位不是跳转到复位向量,而是核心寄存器由硬件重新初始化,程序计数器指向复位地址。
答案 1 :(得分:0)
架构可能在精确细节上有所不同,但即使您的应用程序和引导加载程序具有独立的向量表,复位的效果也包括将向量表地址重置为默认地址,因此只有一个复位向量。
有关具体细节的特定处理器或体系结构,请参阅参考手册。它将包括所有寄存器和外设的复位状态。