首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/Assembler -在没有堆栈的单用户、单任务操作系统中返回代码

C/Assembler -在没有堆栈的单用户、单任务操作系统中返回代码
EN

Stack Overflow用户
提问于 2010-01-12 18:44:07
回答 2查看 669关注 0票数 1

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

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

应用程序如何向调用的OS返回值,调用的OS如何取回控制权?我想,这可以使用中断来完成- OS有一个特殊的驻留函数,并连接了一些中断,并且每个应用程序都只是在它自己的执行结束时调用这个中断。但是,如果没有系统堆栈,操作系统如何读取返回代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-12 18:53:25

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

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

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

票数 4
EN

Stack Overflow用户

发布于 2010-01-12 18:47:43

一种解决方案是让程序将它的退出代码写在内存中一个固定的、已知的位置--这样“操作系统”就可以读取它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2048271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档