Embedded 处理许多中断源

Embedded 处理许多中断源,embedded,interrupt,processor,rtos,Embedded,Interrupt,Processor,Rtos,考虑到各种传感器有100多种中断方式。所有这些都有可能同时发生。如何设计软件来有效地处理它?这取决于您是否在优化延迟或吞吐量 既然你问的是效率,我猜你是在看吞吐量。在这种情况下,一种行之有效的模式是让中断处理程序读取传感器,将命令和状态排队,然后立即返回 您有一个非中断软件线程从队列中拾取命令并为处理程序宣布事件。这将最小化任务切换时间。您可以使用特定于域的逻辑来组合命令,抛出不再相关的命令,等等 这就是窗口系统的工作原理。每次鼠标点击、鼠标移动、键盘按下等都会导致命令排队。窗口系统会将命令取出

考虑到各种传感器有100多种中断方式。所有这些都有可能同时发生。如何设计软件来有效地处理它?

这取决于您是否在优化延迟或吞吐量

既然你问的是效率,我猜你是在看吞吐量。在这种情况下,一种行之有效的模式是让中断处理程序读取传感器,将命令和状态排队,然后立即返回

您有一个非中断软件线程从队列中拾取命令并为处理程序宣布事件。这将最小化任务切换时间。您可以使用特定于域的逻辑来组合命令,抛出不再相关的命令,等等

这就是窗口系统的工作原理。每次鼠标点击、鼠标移动、键盘按下等都会导致命令排队。窗口系统会将命令取出来并调用相应的处理程序。在将命令从队列中取出时,有大量的逻辑用于抛出不相关的命令、组合命令和加速命令


网络堆栈使用相同的模型。数据包按网络级别排队,然后主循环将其取出,并使用控制反转模型处理每个数据包。

这取决于您是在优化延迟还是吞吐量

既然你问的是效率,我猜你是在看吞吐量。在这种情况下,一种行之有效的模式是让中断处理程序读取传感器,将命令和状态排队,然后立即返回

您有一个非中断软件线程从队列中拾取命令并为处理程序宣布事件。这将最小化任务切换时间。您可以使用特定于域的逻辑来组合命令,抛出不再相关的命令,等等

这就是窗口系统的工作原理。每次鼠标点击、鼠标移动、键盘按下等都会导致命令排队。窗口系统会将命令取出来并调用相应的处理程序。在将命令从队列中取出时,有大量的逻辑用于抛出不相关的命令、组合命令和加速命令


网络堆栈使用相同的模型。数据包按网络级别排队,然后主循环将其取出,并使用控制反转模型处理每个数据包。

经验法则是中断处理程序应尽可能少地处理中断。让它们“尽可能短”

例如,如果您的设备必须在串行端口上接收消息并做出响应:UART串行RX中断处理程序应该只读取传入字节并将其存储在缓冲区中(并确保没有缓冲区溢出)。就这样。然后,主循环任务应该稍后处理缓冲区中的数据,并在缓冲区中创建任何响应,以便可以通过串行TX中断处理程序传输


在过去,我见过嵌入式软件,其中中断处理程序处理整个通信协议。它起作用了,但是中断处理程序运行了很长时间,因此延迟了其他中断处理程序的运行。这增加了其他中断处理程序不能及时处理其事件的风险。

经验法则是,中断处理程序应该尽可能少地处理中断。让它们“尽可能短”

例如,如果您的设备必须在串行端口上接收消息并做出响应:UART串行RX中断处理程序应该只读取传入字节并将其存储在缓冲区中(并确保没有缓冲区溢出)。就这样。然后,主循环任务应该稍后处理缓冲区中的数据,并在缓冲区中创建任何响应,以便可以通过串行TX中断处理程序传输


在过去,我见过嵌入式软件,其中中断处理程序处理整个通信协议。它起作用了,但是中断处理程序运行了很长时间,因此延迟了其他中断处理程序的运行。这增加了其他中断处理程序无法及时处理其事件的风险。

如果您的系统确实有100个中断源,那么效率可能不是唯一的问题。您可能必须进行“延迟分析”,以确保在最坏的情况下不会失败需求

首先,测量每个ISR的最坏情况时间。 然后,对于每个中断X:

  • 确定截止日期:中断X发生和灾难(如数据丢失、通信窗口丢失等)之间可能经过的最长时间是多少
  • 确定其他ISR的最坏情况,它可以阻止服务中断X。根据处理器的优先级结构,您可能需要考虑在X之前发生的中断,以及X正在挂起时发生的中断。
  • 将步骤2中识别的ISR的所有时间相加。如果总和大于截止日期,则需要重新设计

  • 重新设计可以包括使ISR更快、调整FIFO长度、更改中断频率(收集更多数据的频率更低,反之亦然)、调整顺序以确保某些中断不会同时发生。没有一刀切的战略。(尽管更快的ISR几乎总是一件好事。)

    如果您的系统确实有100个中断源,效率可能不是唯一的问题。您可能必须进行“延迟分析”,以确保在最坏的情况下不会失败需求

    首先,测量每个ISR的最坏情况时间。 然后,对于每个中断X:

  • 确定截止日期:中断X发生和灾难(如数据丢失、通信窗口丢失等)之间可能经过的最长时间是多少
  • 德特