Arm Cortex M3 - 中断

时间:2015-06-28 19:55:08

标签: arm cortex-m3 cortex-m

我对组装微控制器的编程比较陌生, 所以我有一个非常基本的问题。 我正在使用Arm Cortex M3。

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

我非常感谢在汇编中使用中断的示例代码。

如果我还有其他任何关于使用中断的知识,如果你分享你的知识,我会很高兴的!

非常感谢

3 个答案:

答案 0 :(得分:3)

中断就是它所谓的中断。因此,例如,您可以站在前门,以防万一有人过来。或者你可以每隔一两分钟向窗外看,以防有人过来。或者你可以有一个门铃,只有在门铃按照优先权响起时才会上门。因此,如果您正在看电视,您可能会决定暂停该计划或错过其中的一部分,然后去看看谁在那里。您可能正在淋浴或以其他方式占用浴室,并且可能选择优先于门,假设您还不知道谁来了......或者您可能在前面做院子工作,如果有人来过您已经那里,也是一个中断,但也类似于民意调查。

所以你可以轮询,不断地使用代码或者每隔这么多时间检查一次外围设备以查看是否发生了某些事情。或者你可以设置一个中断然后如果发生了什么事情你会被打断并以任何方式处理它(保存一个标志,说你有一个然后稍后处理它,或者当时处理它或中间的某个地方处理它)。

没有正确答案,有时轮询很好或有时更好。有时轮询很糟糕或消耗太多时间或者速度不足以进行轮询并执行其他前台任务。同样,中断可能是一个好主意或坏,取决于。您应该对每个进行基本的了解,从轮询开始,然后根据要解决的问题在解决方案中进行设计。设置你的第一个中断可能非常困难,它们通常是非常重要的,通常,在可能的情况下,最好从轮询开始,了解如何启用,并以轮询方式查看中断(并非所有硬件都可以让你这样做,但通常你可以轮询,但最后一次启用禁用,实际上不中断)然后学习如何服务和清除中断,然后你必须确保你的服务程序足够快,不要搞乱前台任务上的其他事情,它也可以共享寄存器等资源,因此请确保在处理器设计时或按照处理器设计的要求保留前台任务的状态。 (cortex-m3负责保留寄存器的状态,但一般情况下你应该理解这一点),然后在启用中断时触发触发器。即使对于经验丰富的人来说,让中断服务程序工作也不容易,你可能会达到9次中有9次它第一次工作然后你转移到一个新的平台或芯片或其他什么,你必须调试它时它不起作用,这是真正的问题,尤其是嵌入式微控制器,其中对正在发生的事情的可见性非常有限。

答案 1 :(得分:1)

就像你正在读书并同时等待朋友一样,要么你去窗口看看你的朋友是否来过然后打开门(称为民意调查)或者而是继续读书并等待响铃(这称为中断)。因此,在阅读你的书时不要打扰自己,你应该等待中断。

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

为了实现,我建议阅读这本书" ARM Cortex-M3的权威指南"由Joseph Yiu撰写。

答案 2 :(得分:1)

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

i.CPU Cycles&功率效率

现在假设您有一个处理来自UART外围设备的数据的项目,这里有两个选项;您将连续轮询以查看是否从UART通道接收到任何数据,或者您将设置相应的中断,并且只要从通道接收到数据,cpu就会调用相关的中断子程序。

如上所述,使用轮询方法CPU必须不停地工作,这实际上是愚蠢的,因为不是继续为内部外围设备工作,它可以轻松地做一些其他工作(如等待TCP接收或可以不能通过IRQ完成或只是进入低功耗模式并等待IRQ启动。

ii。)任务优先排序&精确(这,我相信,最重要的)

在任何编程语言中,如果你不使用异常处理,那么对于程序员和CPU资源来说,优先考虑这些东西需要花费太多精力。实际上,当你的程序变得更大时,这是不可能的。更大,你不会在主循环中有任何空间来做你想要的事情。例如,如果您的程序正在计算多维数组的傅里叶变换,它将忽略任何其他事情。(ADC读数,传入数据传输等)这是优先级发生的地方。使用中断你可以实际决定什么&当你可能遇到的每个场景发生时。

对于需要精确定时事件的任务,无法在没有中断的情况下完成。即使是最简单的任务,例如在每'x'毫秒内递增一个计数器,也会成为你遇到的最难的事情:P。大多数情况下,在不使用中断的情况下进行此类操作的实验最终会发现毫秒'x'在某个边界之间移动。