1

我有一个简单的引导加载程序,它初始化和准备 SDRAM。然后它从 Flash 加载一个应用程序并在 RAM 中的某个地址启动它。应用程序完成执行后,系统会重新启动。没有系统堆栈。

现在,我希望这个引导加载程序在应用程序完成执行后接收控制权。引导加载程序(我们称之为操作系统)还必须读取应用程序的返回码。

应用程序如何将值返回给调用操作系统以及调用操作系统如何取回控制权?我想,它可以使用中断来完成——操作系统有一个特殊的常驻函数和一些中断,每个应用程序只是在自己的执行结束时调用这个中断。但是如果没有系统堆栈,操作系统如何读取返回码呢?

4

2 回答 2

4

通常你会在一个或多个寄存器中留下一个返回码,但由于你可以控制,你可以把它留在你喜欢的任何地方!

当应用程序中断时,中断处理例程需要将应用程序的状态保存在某处,这可能意味着从影子寄存器复制到内存中的预定义位置。

如果应用程序将控制权交还给操作系统(通过软件中断/系统调用),那么您需要定义自己的调用约定,在其中放置寄存器参数,并且事件处理程序需要在将控制权传回给操作系统之前遵循这一点. 您可能希望尽可能使调用约定与您的 c 编译器的调用约定匹配,以使您自己轻松。

于 2010-01-12T10:53:25.497 回答
2

一种解决方案是让程序将其退出代码写入内存中固定的已知位置 - 然后“操作系统”可以读取它。

于 2010-01-12T10:47:43.490 回答