技术热线: 4007-888-234

单片机与嵌入式系统中的并发和中断

更新时间: 2019-10-18
阅读量:2466

在本文中,我们将介绍并发的概念以及许多单片机提供的用于处理并发的机制,专业术语称为“中断”。下面我们将介绍这些概念的基本定义,并思考它们与单片机代码之间的关系。

一、什么是并发?

以生活中的示例来解释并发性。通常,当你上床睡觉时,你希望在特定时间醒来。你在这里有两个目标:上床睡觉以便休息,同时也要确保在起床时间别又睡着了。

introduction.jpg

确保你不会错过起床时间的一种方法是保持清醒状态并观看时钟,但这将使你无法上床睡觉。为了解决这个问题,我们通常使用闹钟在特定时间唤醒我们,这样我们就可以专注于睡眠并且仍然达到唤醒的目标。

并发是我们用于描述场景的术语,当你有两个或两个以上的流程同时参加,但在任何时间点只能物理处理一个流程。

在上面的示例中,需要注意的两个过程是睡眠和跟踪时间(因此我们在所需的时间醒来)。同一个人在同一时间不可能同时做这两个事情。

通常,我们只对与我们正在参与的流程相关的特定事件感兴趣。正如你在上面注意到的,从时间角度来看,我们关心的唯一事件是是否该醒了。解决并发的典型方法是让另一个物理资源(闹钟或人)监视我们感兴趣的事件,然后提醒(或中断)该事件已发生的事实,以便我们可以进行处理。

二、单片机和网络物理系统中的并发

单片机和网络物理系统通常必须处理并发性。实际应用中的一个例子是微波炉。该设备需要能够处理食物加热过程中按下按钮或检测你何时打开门。按下暂停或取消按钮或打开门会使食物停止加热。

单片机在设计时都会考虑并发性。除了通用CPU外,它们还包含许多用于与外界交互的专用硬件设备(称为外围设备),因此你可以连接诸如按钮和显示器之类的东西以及实现系统所需的其他外部硬件。通常,这些外设具有中断机制,因此CPU可以要求它们监视特定事件,然后在该事件发生时中断CPU。

三、更高级别的中断和并发程序概述

单片机上的中断的工作方式与前面讨论的睡眠和闹钟示例相同。

你可以编写一个配置外设以监视某个事件并在该事件发生时中断CPU的程序,例如,当GPIO输入值从0到1时。在程序运行时,CPU执行你的程序段。主程序。当你正在等待的事件发生时,外围设备会向CPU发出事件已发生的信号。如果一切配置正确,CPU将停止在主程序中执行的操作,执行一个称为中断服务程序(ISR)或中断处理程序的特殊功能,然后返回主程序以从中断处继续执行。完成时。

你必须将ISR编写为代码的一部分。假设你正在使用C编写程序,这意味着你必须在将作为单片机将运行的可执行文件的一部分构建的源代码中的某个地方声明和定义它。

但是,你自己不会呼叫ISR。所有单片机开发工具都有一种特定的方式让你告诉C编译器某个功能是一个ISR,以及它与哪个特定中断相关联。一旦正确完成此操作,当发生特定中断时,CPU将自动跳转至该功能并执行。

C代码中断示例

由于中断的工作方式,一开始在编程中处理并发性似乎有点不直观。

下图详细介绍了用C语言编写的具有ISR的代码如何操作,以帮助提供一种思考并发程序的好方法,假定所有中断配置均正确完成。

introduction-to.jpg

1.CPU在main函数的while循环中执行代码。
2.事件(从1变为0)发生在为中断配置的引脚上。
3.CPU在while循环中停止执行代码,并执行中断服务程序。
4.完成中断服务程序执行后,CPU从中断处重新开始执行主循环。
5.CPU在while循环中执行代码。
6.事件再次发生。
7.CPU在while循环中停止执行代码,并执行中断服务程序。
8.完成中断服务程序执行后,CPU从中断处重新开始执行主循环。