【发布时间】:2015-05-07 15:24:31
【问题描述】:
我正在阅读有关微控制器中断的信息,我想知道当前状态的保存是否也适用于软件中断或仅适用于硬件中断。
【问题讨论】:
标签: microcontroller
我正在阅读有关微控制器中断的信息,我想知道当前状态的保存是否也适用于软件中断或仅适用于硬件中断。
【问题讨论】:
标签: microcontroller
是的。任何中断背后的一般概念是,它可以暂停底层程序的执行,而该程序不会意识到它已被中断。这需要存储 CPU 和(某些)寄存器状态,并在中断服务程序完成后恢复它们。 CPU 通常具有执行此操作的特殊硬件机制。
软件中断共享相同的机制,因此状态被保存和恢复。
但是请注意,软件中断的正常使用是在更复杂的微处理器上,它们允许安全的硬件机制在特权模式之间移动 - 例如您的应用程序和操作系统。在低级微控制器上它们用处不大,好像你已经知道要调用中断中的那段代码,你还不如直接作为函数调用它。
【讨论】:
通常保存的状态是最小的:当 ISR 的唯一操作是 RTI 时,足以恢复之前的状态。通常只有指令指针(和代码段)和标志。不保存整个处理器状态,否则会给时间关键的中断带来太多开销。除了处理器中断的基本机制之外,ISR 还需要保存和恢复任何内容。
【讨论】:
是也不是,正如 Jon 所描述的那样,是的,但是软件中断可以用作您与操作系统的接口,对于该用例,您可能会将寄存器设置为软件中断的参数。并期望在它返回结果时注册。
所以软件中断,可以像硬件中断一样处理,你必须保留状态,或者它们可以被当作或用作花哨的函数调用,你有参数进入并且
【讨论】:
简而言之,这是一个可能。
不知道确切的例子,我不能说。保存或不保存的内容实际上取决于生成/接收中断的软件。
在低级别,人们对事情发生的速度有很多担忧。因此,避免了可能不需要完成的工作。因此,如果您不打算修改它,“保存您的状态” 是没有意义的。所以这真的取决于我们到底在说什么。
这就是规范发挥作用的地方。操作系统和处理器都明确指定了它们保存的状态和不保存的状态,并且根据您的具体问题,答案可能会有所不同...
@dwelch 的回答对 Linux 进行了解释。 (最接近您的要求)
@Jon 的回答对一般处理器进行了解释。
@weather-vane 的回答为微控制器解释了这一点。
这些都是具体的例子。如果您在微控制器上使用 FreeRTOS,您可能必须制作自己的软件中断协议并自己定义,在这种情况下,您可以选择保存状态或将责任留给调用者。最后,这只是编写系统的程序员做出的选择,因此您必须找到他的笔记并阅读它们。
说到底,多半是君子协定。
【讨论】: