Arm-M3-中断

Arm-M3-中断,arm,cortex-m3,cortex-m,Arm,Cortex M3,Cortex M,我对汇编中的微控制器编程比较陌生, 所以我有一个很基本的问题。 我用的是手臂 使用中断的最大优点是什么? (降低功耗或能够编写更快的代码?) 如果有一段在汇编中使用中断的示例代码,我将非常感激 如果关于使用中断还有什么我应该知道的,我很高兴你能分享你的知识 非常感谢中断就是我们所说的中断。例如,你可以站在你的前门,以防万一有人路过。或者你可以每隔一两分钟看看窗外,以防有人路过。或者你可以按门铃,只有在门铃响的时候才去开门,这是基于优先级的。因此,如果你正在看电视,你可能会决定暂停节目或错过一些节

我对汇编中的微控制器编程比较陌生, 所以我有一个很基本的问题。 我用的是手臂

使用中断的最大优点是什么? (降低功耗或能够编写更快的代码?)

如果有一段在汇编中使用中断的示例代码,我将非常感激

如果关于使用中断还有什么我应该知道的,我很高兴你能分享你的知识


非常感谢

中断就是我们所说的中断。例如,你可以站在你的前门,以防万一有人路过。或者你可以每隔一两分钟看看窗外,以防有人路过。或者你可以按门铃,只有在门铃响的时候才去开门,这是基于优先级的。因此,如果你正在看电视,你可能会决定暂停节目或错过一些节目,然后到门口看看谁在那里。你可能正在洗澡,或者有人在浴室里,如果你还不知道谁来了,你可能会选择优先于门的方式……或者你在外面做院子里的工作,如果有人从你身边经过,你已经在那里了,也会被打断,但也类似于投票

因此,您可以轮询,让代码不断或每隔这么多时间单位检查外围设备,以查看是否发生了什么。或者你可以设置一个中断,然后如果发生了什么事情,你会被中断,并以任何方式处理它(保存一个标志,表明你有一个中断,然后再处理它,或者立即或在中间处理它)


没有正确的答案,有时投票是好的,有时更好。有时轮询不好,或者占用了太多时间,或者不够快,无法为此进行轮询并执行其他前台任务。同样,中断可能是一个好主意,也可能是一个坏主意,这取决于。您应该对每个问题有一个基本的了解,从轮询开始,然后根据要解决的问题在解决方案中进行设计。仅仅设置第一个中断可能非常困难,通常情况下,它们都不是琐碎的,通常,在可能的情况下,最好从轮询开始,了解如何启用,并以轮询方式查看中断(并非所有硬件都允许您这样做,但通常您可以轮询,但最后一个启用被禁用,以便不实际中断)然后学习如何服务和清除中断,然后您必须确保您的服务例程足够快,不会打乱前台任务上的其他事情,而且它可能共享诸如寄存器之类的资源,因此确保在处理器设计需要时保留前台任务的状态。(cortex-m3负责保存寄存器的状态,但通常您应该了解这一点),然后在启用中断时触发。即使对于有经验的人来说,让中断服务程序正常工作也不是件容易的事,你可能会遇到这样的情况:10次中有9次是第一次工作,但之后你会移动到一个新的平台或芯片或其他什么东西,当它不工作时,你必须对它进行调试,这才是真正的问题,使用嵌入式微控制器的esp,对正在发生的事情的可见性非常有限。

这就像你在读一本书,同时在等待一个朋友,所以你要么去窗口看看你的朋友是否来了,然后打开门(称为轮询)或者继续读一本书,等待铃声响起(这称为中断)。因此,与其在看书时打扰自己,不如等别人打断你

但是,使用轮询还是中断是更好的解决方案取决于您的应用程序


为了实现这一点,我建议阅读约瑟夫·姚(Joseph Yiu)写的《手臂皮质M3的最终指南》(the Financial Guide to the ARM Cortex-M3)一书。

中断的想法背后有两个原因

i、 CPU周期和电源效率

现在假设您有一个处理来自UART外围设备的数据的项目,这里有两个选项;您可以连续轮询以查看是否有任何从UART通道接收的数据,也可以设置相应的中断,每当从通道接收到数据时,cpu将调用相关的中断子例程

如前所述,使用轮询方法,CPU必须不间断地工作,这是非常愚蠢的,因为它不需要为内部外设连续工作,而可以轻松地完成其他工作(如等待TCP接收或无法通过IRQ完成的工作),或者简单地进入低功耗模式,等待IRQ启动

ii.)任务优先级和精确度(我认为这是最重要的)

在任何编程语言中,如果不使用异常处理,那么对这些内容进行优先级排序对程序员和CPU资源来说都需要付出太多的努力。事实上,更重要的是,这样做是不可能的,因为随着程序越来越大,主循环中没有任何空间在需要时执行您想要的操作。例如,如果您的程序正在计算多维阵列的傅里叶变换,它将忽略任何其他内容(ADC读数、传入数据传输等),这就是进行优先级排序的地方。通过使用中断,您实际上可以决定您可能面临的每个场景发生的情况和时间

此外,对于需要精确计时的任务,如果没有中断,事件无法完成。即使是最简单的任务,比如每“x”毫秒增加一个计数器,也可能成为你所遇到过的最困难的事情:P。大多数情况下,在不使用中断的情况下进行这样的实验,最终发现毫秒“x”在某个边界之间移动