4.2 為多處理器系統(tǒng)創(chuàng)建軟件
在NiosII IDE[3]環(huán)境下,為3個處理器系統(tǒng)分別創(chuàng)建6個軟件工程,為每個處理器創(chuàng)建一個應(yīng)用工程和一個系統(tǒng)庫工程。之后對軟件工程進行編譯、運行和調(diào)試。
軟件使用硬件Mutex共享一個消息緩存區(qū)。3個處理器分別寫消息到消息緩存區(qū)(count)且循環(huán)加1。cpul讀消息且通過jtag_uart顯示消息。每個處理器運行同樣的C文件,但處理器的操作稍有不同。這是通過使用Ni-osII的cpuid實現(xiàn)的。在NioslI處理器系統(tǒng)中,某個處理器通過寫其cpuid控制寄存器的值到Mutex寄存器的OWNER域來對Mutex加鎖。cpuid寄存器保持一個靜態(tài)值,在多處理器系統(tǒng)中,該值唯一地識別一個處理器,且在系統(tǒng)創(chuàng)建時確定。軟件執(zhí)行某個處理器的函數(shù)時,首先檢查處理器的cpuid,如果cpuid正確,則執(zhí)行相應(yīng)函數(shù)。工程中的文件為hello_world_multi.c,其中將信息寫入緩沖區(qū)的功能由以下程序段實現(xiàn):


如果將信息從jtag_uart輸出,那么程序首先判斷id是否等于3。因為硬件設(shè)計時,只有cpul與jtag_uart相連,而cpul的id的值為3(在系統(tǒng)創(chuàng)建時確定),cpu2、cpu3的id分別為1和2,且id的值等于cpuid控制寄存器的值加1,可在NiosII IDE環(huán)境下讀取cpuid控制寄存器的內(nèi)容。其信息輸出的程序如下:


在System Library屬性中,第1個工程選擇jtag_uart為stdin、stderr和stdout,選擇cpul_timer為the Systemclock timer;第2個工程選擇cpu2_timer為System clocktimer,驗證stdin、stderr和stdout為null,因為這個處理器不與jtag_uart連接;第3個工程選擇cpu3_timer為Systemclock timer,其余同工程2。驗證這3個工程的SDRAM被選擇為Program memory、Read-only data memory、Read/write data memory、Heap memory和Stack memory。
分別經(jīng)編譯、下載、運行后,在終端上顯示這3個處理器產(chǎn)生的消息,如圖2所示。

結(jié) 語
結(jié)果表明,3處理器系統(tǒng)通過硬件互斥核,實現(xiàn)了存儲器的共享。在此實例的基礎(chǔ)上,按同樣的方法添加處理器及相應(yīng)的硬件組件,并開發(fā)相關(guān)應(yīng)用軟件,即可實現(xiàn)滿足不同需求的多處理器系統(tǒng)。
(來源:單片機與嵌入式系統(tǒng)應(yīng)用)





