繁体   English   中英

引导加载程序重定位后的ARM M0 +异常堆栈指针

[英]ARM M0+ exception stack pointer after bootloader relocation

我正在使用Crossworks作为开发平台。

我认为我没有这样做-但是我写的引导程序将“主”堆栈放在了低内存中。 稍后(在Crossworks升级之后)-我编写了应用程序代码,链接器将堆栈放置在高内存中。

经过三天的调试,我发现了应用程序中内存损坏的根本原因。

应用程序使用的是复位时定义的堆栈指针(重定位地址0-0x4000),该堆栈指针是高内存,但是中断代码正在使用引导加载程序(低内存)中的堆栈指针,这破坏了我的数据。

问题-ARM文献指出(我不使用“进程”堆栈)-应用程序和异常处理程序使用“主”堆栈。 引导程序从第一个字加载SP,然后跳转到第二个字中包含的地址。 然后,启动代码再次设置堆栈指针。 因此,如果启动代码正在设置堆栈指针(“主”堆栈)并且应用程序使用的是堆栈,那么异常处理程序如何仍在使用引导加载程序中的堆栈指针?

假设我有一个在低内存中使用堆栈的引导程序,而在高内存中使用堆栈的应用程序-我如何让应用程序异常使用当前被视为“主”堆栈的堆栈指针?

我在该领域中有产品,因此我必须更正应用程序的异常堆栈指针,而不仅仅是创建一个使用高内存堆栈的新引导加载程序。

我希望我能比泥浆解释得更清楚。

引导加载程序使用了“进程”堆栈,因此控制寄存器设置了位1。

我清除了重定位应用程序中的控制寄存器,以便使用一个堆栈并解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM