Events 事件和中断之间的区别 我知道这个话题很久以前就已经讨论过了(link:),尽管我认为答案不够。原因是下一个:当我们谈论事件与中断时,术语事件意味着硬件而不是软件。此外,根据这一解释,一个事件是可预测的,不是突然发生的,但在唤醒事件的情况下,这不可能是真的,因为这个事件不是“预期的”,而是自发发生的。例如,可以查看stm32数据表并注意到有一个所谓的唤醒事件启用寄存器。此“事件”既不涉及要执行的特定代码段,也不涉及与软件相关的内容。

Events 事件和中断之间的区别 我知道这个话题很久以前就已经讨论过了(link:),尽管我认为答案不够。原因是下一个:当我们谈论事件与中断时,术语事件意味着硬件而不是软件。此外,根据这一解释,一个事件是可预测的,不是突然发生的,但在唤醒事件的情况下,这不可能是真的,因为这个事件不是“预期的”,而是自发发生的。例如,可以查看stm32数据表并注意到有一个所谓的唤醒事件启用寄存器。此“事件”既不涉及要执行的特定代码段,也不涉及与软件相关的内容。,events,embedded,interrupt,hardware,mcu,Events,Embedded,Interrupt,Hardware,Mcu,事件是一个更高的抽象层概念,通常出现在系统或应用程序编程中。它们不一定基于硬件,但可能完全由软件触发。这个词没有单一的定义,它相当宽泛 另一方面,中断总是由最低级别的硬件触发。另一个术语是硬件异常,上层内核和微控制器通常在出现异常情况(无效指令、除零、内存访问错误等)时将这些异常分离为内核或监控硬件抛出的异常。然而,中断源可能是预期的硬件行为或某些错误情况 中断和硬件异常需要在硬件查找表(通常称为中断向量表)中注册处理程序函数。当中断发生时,硬件将转到该表,以查找要调用的函数的地址-此类函数称为

事件是一个更高的抽象层概念,通常出现在系统或应用程序编程中。它们不一定基于硬件,但可能完全由软件触发。这个词没有单一的定义,它相当宽泛

另一方面,中断总是由最低级别的硬件触发。另一个术语是硬件异常,上层内核和微控制器通常在出现异常情况(无效指令、除零、内存访问错误等)时将这些异常分离为内核或监控硬件抛出的异常。然而,中断源可能是预期的硬件行为或某些错误情况

中断和硬件异常需要在硬件查找表(通常称为中断向量表)中注册处理程序函数。当中断发生时,硬件将转到该表,以查找要调用的函数的地址-此类函数称为中断服务例程(ISR)。中断将有一个特殊的调用约定,其中某些寄存器在调用ISR之前由硬件堆叠,并且在ISR完成时使用来自的特殊返回指令恢复寄存器

但是,事件使用软件回调函数,通常由应用程序在创建事件时传递函数指针。这就是它们在应用程序编程和快速应用程序开发(RAD)工具中的典型使用方式。在嵌入式系统中,可以通过让应用程序为驱动程序中发生的某些事情注册大量回调,然后让驱动程序调用回调来创建类似的东西。但是,即使驱动程序是硬件上最底层的代码,它仍然是软件,执行由软件设计的调用

但由于“事件”是一个如此宽泛的术语,在某些情况下,事件是可以与更广泛的API函数一起使用的对象。然后它们不一定有回调函数——它们本质上只是标志。例如,在Windows操作系统中,应用程序程序员可以创建一个事件,向正在运行的线程发送信号,之后线程可以利用CPU有效的睡眠功能,并等待直到接收到事件。这是通过让线程自己优雅地结束来正确停止线程的正常方法之一

中断和事件的共同点是它们都会导致有效但不确定的执行。当中断/事件没有触发时,程序可以做其他事情,并且不需要使用轮询某个标志,这是中断的替代方法。但当它触发时,它会中止当前的执行,并通过执行其他操作来中断当前的执行。此外,除了当前的调用堆栈之外,它还会在堆栈上推送一些额外的调用,因此如果在程序处于最深的调用级别时发生这种情况,您可能会遇到非常微妙的错误,例如间歇性堆栈溢出


中断的另一个问题,也可能是事件的另一个问题是,它们通常充当独立的线程,并且伴随着所有的线程安全问题。您需要通过信号量或保证原子访问来保护与ISR/callback共享的变量不受竞争条件错误的影响。我想说,在嵌入式系统中,没有做到这一点是迄今为止最常见的错误。这也会产生令人难以置信的微妙漏洞。

我认为今天提出的原始问题将作为一个意见问题结束,因此偏离主题。答案,或者至少你在这里对它的解释显然是不充分的,而且我认为是不正确的。事件是在系统存在的真实世界/环境中发生的事情。检测此类事件的方式包括但不限于中断。按下一个按钮可能是一个事件,该事件可能导致中断或可能被轮询(例如)。那么为什么stm32具有用于和不用于唤醒中断的启用寄存器,即使其他启用寄存器专用于中断而不用于唤醒?术语“事件”具有一般含义。如果您关心特定的上下文,则应在问题中指定该上下文。此外,唤醒信号在任何情况下都不是中断。它唤醒处理器,处理器重新启动,就好像发生了重置一样。
它们不一定基于硬件,但可以完全由软件触发。
中断也可以基于软件。
另一方面,中断总是由硬件触发,在最底层。
这是我之前说过的。
中断和硬件异常要求处理器函数注册在通常称为中断向量表的硬件查找表中。
所谓的?
事件是否有其他名称,但使用软件回调函数,通常由应用程序在创建事件时传递函数指针。。。但是,即使驱动程序是硬件上最底层的代码,它仍然是软件,执行由软件设计的调用。
好吧,这里我可以提到唤醒事件,它既不需要执行指令,也不需要软件参与。
但是