我想编写Raspberry pi 2上按钮中断的代码。该主板使用QUAD Core Broadcom BCM2836 CPU(ARM架构)。这意味着,该主板上只有一个CPU(Raspberry pi 2)。但我不知道多核系统如何中断。我想知道中断线是连接到每个核心还是一个CPU。所以,我通过Google找到了以下段落。
多核系统中断 在多核系统上,每个中断都指向一个(并且只有一个)CPU,尽管哪个并不重要。如何发生这种情况是由电路板上的可编程中断控制器芯片控制的。在系统启动时初始化PIC时,可以对它们进行编程,以便将中断传送到您想要的任何CPU;在某些PIC上,每次CPU关闭时,您甚至可以在CPU之间轮换中断。
这是否意味着每个CPU都会发生中断?我无法理解上面的信息。如果每个内核发生中断,我必须考虑按钮的每个中断服务程序的共享数据的关键部分。
如果每个CPU发生中断,我不必考虑共享数据的关键部分。什么是正确的?
总结一下,我想知道如何在多核系统中断?中断线是连接到每个核心还是CPU?那么,我是否应该考虑相同中断的关键部分?
答案 0 :(得分:0)
你的谷歌引用看起来很通用,或者甚至倾向于x86的大小,但如果是这样的话,那并不重要。
我当然希望你能够控制每个cpu的中断,这样你就可以让一种类型转到另一种类型。
同样地,如果你想要的话,可以选择让所有这些中断。
中断与共享资源无关,无论您是否在ISR中,都必须处理共享资源,因此中断并不重要,您必须处理它。能够将中断从一个外设隔离到一个cpu可以使共享变得更容易,因为你可以让一个cpu拥有一个资源,而另一个cpu向拥有它的cpu发出请求。
双核,四核等核心并不重要,将每个核心视为单个CPU,并解决中断问题,就像单个CPU一样。在中断期间,共享资源是共享资源,也可以是中断期间不共享资源。解决一个cpu的问题,然后处理任何共享。
作为一个ARM,每个芯片供应商的实现可能会有所不同,因此不可能有一个通用的答案,你必须阅读arm核心的arm文档(如果可能的话,他们可以/做的具体版本也是如此)正如芯片供应商所知道的那样,他们拥有围绕arm核心的任何东西。在这种情况下成为Broadcom,与芯片供应商文档一起好运。它们至多是有限的,尤其是raspi2。您可能需要深入了解linux源代码。无论如何,arm,x86,mips等,你只需要阅读文档并做一些实验。首先将每个核心视为独立的cpu,然后在需要时处理资源共享。
如果我没记错的话,默认情况是只有第一个核心运行kernel7.img离开sd卡,其他三个正在循环中等待一个地址(每个都有自己的)写入以获取他们跳到那个并开始做其他事情。所以你真的可以从一个单独的cpu开始,没有共享,并想出来,如果你选择没有触及该资源的另一个cpus上的代码完成了。如果你这样做,那么找出如何共享资源。