2015-11-27 27 views
2

我想編寫Raspberry pi 2上按鈕中斷的代碼。此板使用QUAD Core Broadcom BCM2836 CPU(ARM架構)。這意味着,該主板上只有一個CPU(Raspberry pi 2)。但我不知道如何在多核系統中斷。我想知道中斷線是連接到每個核心還是一個CPU。所以,我通過谷歌找到了這一段。中斷在多核系統中如何工作?

多核系統上的中斷 在多核系統上,每個中斷都指向一個(且只有一個)CPU,但哪個並不重要。這種情況如何發生在電路板上的可編程中斷控制器芯片的控制之下。當您在系統啓動時初始化PIC時,您可以對它們進行編程,以便將中斷傳遞給您想要的任何CPU;在一些PIC上,你甚至可以在每次CPU關閉時在CPU之間進行輪詢。

這是否意味着每個CPU都會發生中斷?我無法理解上面的信息。如果每個內核發生中斷,我必須考慮關鍵按鈕的每個中斷服務例程上共享數據的關鍵部分。

如果中斷髮生在每個CPU上,我不必考慮共享數據的關鍵部分。什麼是正確的?

總結一下,我想知道在多核系統中如何中斷?中斷線是否連接到每個核心或CPU?那麼,我是否應該考慮同一中斷的關鍵部分?

+2

你檢查了嗎? http://stackoverflow.com/questions/11811276/how-do-interrupts-work-on-multicore-arm-cpu?rq=1 – HRgiger

+0

總之; 「取決於中斷控制器的能力,以及如何設置」。 IIRC 2836上的中斷控制器有點「特殊」。 – Notlikethat

+0

[使用GIC的SMP ARM系統上的中斷處理]的可能重複(http://stackoverflow.com/questions/23107876/interrupt-handling-on-an-smp-arm-system-with-gic);這個問題專門針對Linux,但答案並不依賴於此。 –

回答

0

來自谷歌的引用看起來相當通用,或者甚至可能依賴於x86的大小,但如果真的如此,則無關緊要。

我當然希望你能夠控制每個CPU的中斷,這樣你就可以讓一個類型轉到另一個類型。

同樣的,如果你想要的話,可以選擇讓它們全部中斷。

中斷與共享資源無關,無論您是否處於ISR中,都必須處理共享資源,因此中斷無關緊要,您必須處理它。有能力將中斷從一個外設隔離到一個cpu可以使共享更容易,因爲您可以讓一個cpu擁有一個資源,並且其他cpus向擁有它的cpu發出請求。

雙核,四核等核心並不重要,將每個核心視爲一個單一的CPU,它就是這樣,並解決中斷問題,就像你爲一個CPU。共享資源也是共享資源,在中斷期間或不在中斷期間。解決一個CPU的問題,然後處理任何共享。作爲一個ARM,每個芯片供應商的實現可能會有所不同,因此不可能有一個通用的答案,你必須閱讀arm core的arm文檔(如果可能的話,特定的版本,因爲他們可以/做不同),因爲作爲ARM的每個芯片供應商實現可能會有所不同就像芯片供應商所記錄的那樣,無論他們在手臂核心上有什麼。在這種情況下作爲Broadcom,與芯片供應商文檔祝你好運。它們至多受到限制,尤其是raspi2。您可能需要挖掘Linux源代碼。不管是什麼,arm,x86,mips等,你都必須閱讀文檔並做一些實驗。首先將每個內核視爲一個獨立的CPU,然後根據需要處理資源共享。

如果我沒有記錯,默認情況下只有第一個內核運行kernel7.img關閉sd卡,其他三個正在循環等待一個地址(每個都有自己的地址)寫入讓他們跳到那個並開始做別的事情。所以你完全可以從一個單獨的cpu開始,不分享,並且如果你選擇沒有觸及該資源的其他cpus上的代碼,就完成了。如果你這樣做,然後弄清楚如何共享資源。

相關問題