中断与轮询:什么是Dif-(中断)-引用?

欢迎回到Digilent博客!

对于那些已经编写了一段时间代码的人来说,您可能听说过中断和轮询。这两种技术都可以用来提醒系统板,如chipKIT微控制器,当一个输入已经发生。但是这两种方法有什么区别呢?一个比另一个好吗?让我们找出答案。

当使用chipKIT板时,你可能要做的最早的项目之一是设置一个电路,这样当你按下一个按钮时,LED就会打开。程序知道你是否按下按钮的方式是通过数字读取连接到按钮的引脚的当前电压状态,然后适当地打开或关闭LED。然而,通过数字读取,微控制器必须不断检查引脚上的电压状态,以查看下一步应该采取什么行动(打开或关闭LED)。这种不断检查的方法称为轮询。它可能会消耗大量的处理器,因为微控制器总是检查变化,但它也是一种简单的方法,确保一旦变化发生,你想要的效果就会在变化之后立即发生。

按钮按了吗?按钮按了吗?按钮按了吗?
按钮按了吗?按钮按了吗?按钮按了吗?

那么中断呢?中断也是一种检测系统中是否发生了更改的方法,但它不需要不断地检查是否发生了什么。更确切地说,一个中断在硬件上改变了一点,并导致一个中断服务程序(ISR)立即发生,即使chipKIT板正在中间做其他事情,比如打印一些东西到串行监视器(因此得名“中断”)。通常,中断服务程序会设置某种标志(一个布尔值)来指示系统板已经发生了一个中断,然后系统板将更充分地处理一旦它专门检查该标志的状态。

在一个序列的中间发生的中断。打印命令
在一个序列的中间发生的中断。打印命令。

但是如果一个中断立即发生,为什么不在中断发生时立即执行与该中断相关的所有内容呢?在所有现实中,答案是你可以让所有的事情发生在ISR中。实际上,大多数应用程序在一定程度上对时间敏感,因此在一个设计为短暂发生的中断中运行大量代码会适得其反。另外,像delay()这样依赖于时间的函数不会在ISR中工作,millis()的计数器也不会在中断中继续滴答作响。正因为如此,为了保持系统板像设计的那样平稳地运行,在main中偶尔运行一次轮询来检查中断标志是否已经改变往往会容易得多。

中断可以在任何时间触发,但只能在特定时间检查。
中断可以在任何时间触发,但在特定时间检查。

那么,中断和轮询之间的主要区别是什么?一个类比是,你的手机收到一条短信;如果你一直拿出手机查看是否有人给你发过短信,这就是民意调查。如果你正在忙你的一天,然后突然听到你的手机嗡嗡响(中断),你现在知道你收到了一条短信(设置中断标志),然后可以选择在此时或稍后更方便的时候检查你的手机。

你最常用的方法是什么?

0
第一个投票。

关于詹姆斯·科尔文

我最喜欢的事情就是学习新东西。特别是涉及某些技术的事情;电脑组件、有趣的小工具、游戏、编码技术等。我喜欢和我的妻子和两个儿子在一起,也喜欢和朋友们在一起。在我的日常工作中,我管理Digilent论坛和北美支持团队。

查看所有由James Colvin→发布的帖子

关于“中断vs.轮询:什么是Dif-(中断)-ference?”的评论

留下一个回复

您的电子邮件地址将不会被公布。必填字段被标记