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