2013-01-25 50 views
0

我应该使用IRQ模式处理调度程序吗?我的意思是我使用定时器中断,并在中断过程中,我放置了一个代码来保存环境(寄存器,stac),选择一个新任务并加载它的环境。我看到有些系统是基于SVC的,我猜想它的软件中断模式。我的方式是否正确?如何实现上下文切换而不使用定时器中断程序呢?实时操作系统调度程序处理

//编辑

我差点忘了,还有一件事,让我好奇。如何用c语言保存环境?我们没有直接访问物理寄存器。如何使用堆栈?

+0

这个问题还有很多。它可能会被关闭,FYI。这不是一个单一的,具体的,可回答的问题。您正在询问有关中断,上下文切换,异步和同步抢占等问题。您可能要开始[在此问题](http://stackoverflow.com/questions/11602395/difference-between-preemption-and-context-开关)。 – Dan

+0

这真的很有帮助,我会经历这个话题。令人惊讶的是,它尚未关闭。 –

回答

0

“我应该使用IRQ模式处理调度程序吗?”没有答案。使用任何你想要的,IRQ模式可以用于调度程序中断,但是你也将不得不从任务正在运行的任务中重新安排任务,除非你能够在软件中挂起一个中断,否则不能从IRQ处理程序轻松完成。

您是否正在编写调度程序以获得乐趣?我可以理解你为什么想这样做,但是如果你想要一个商业项目的调度程序,那么你将会更好地获得一个已经工作并且功能强大的 - 有很多!有些人和我一样,都是专业素质和专业支持,但却是免费的,所以你为什么要写自己的? (http://www.freertos.org)

+0

这是正确的我知道threre在互联网上有很多rtos,但我不想在这方面赚钱。我只是想了解它在实践中是如何工作的。 –

0

IRQ模式需要硬件中断,而SVC可以通过SWI进入。在通用RTOS中,硬件中断不是唯一的调度事件。 IPC,定时器,延时到期和同步机制也将启动任务重新安排。出于这个原因,SVC模式会更合适。

但这只与旧ARM架构有关;例如Cortex-M在这方面有很大的不同,旨在使RTOS的实现更加简单和高效。 CSMIS库包括RTOS和调度原语,您可以从中构建功能全面的RTOS或调度程序。

相关问题