我有一个简单的引导程序,它初始化和准备SDRAM。然后,它从Flash加载一个应用程序,并在RAM中的某个地址启动它。应用程序执行完毕后,系统会重新启动。没有系统堆栈。
现在,我希望这个引导加载器在应用程序完成执行后接收控制权。bootloader (让我们称之为OS)还必须读取应用程序的返回码。
应用程序如何向调用的OS返回值,调用的OS如何取回控制权?我想,这可以使用中断来完成- OS有一个特殊的驻留函数,并连接了一些中断,并且每个应用程序都只是在它自己的执行结束时调用这个中断。但是,如果没有系统堆栈,操作系统如何读取返回代码?
发布于 2010-01-12 18:53:25
通常你会在一个或多个寄存器中留下一个返回码,但是既然你控制了它,你可以把它放在你喜欢的任何地方!
当应用程序被中断时,中断处理例程需要将应用程序的状态保存在某个地方,这可能意味着从影子寄存器复制到内存中的预定义位置。
如果应用程序将控制权交还给操作系统(通过软件中断/系统调用),那么您需要定义自己的调用约定,寄存器参数被放入其中,事件处理程序在将控制权交还给操作系统之前需要遵循这一约定。您可能希望使调用约定尽可能地与您的c编译器的约定相匹配,以使您自己的工作更容易。
发布于 2010-01-12 18:47:43
一种解决方案是让程序将它的退出代码写在内存中一个固定的、已知的位置--这样“操作系统”就可以读取它。
https://stackoverflow.com/questions/2048271
复制相似问题