隨著汽車智能化的不斷發(fā)展,汽車電子行業(yè)有著越來越大的市場(chǎng)。作為NXP在汽車電子上主推的控制器件,MPC系列高性能和高安全性MCU正在逐步提高自身的地位,發(fā)揮著更為顯著的作用。本文以MPC5746R的實(shí)際應(yīng)用為例,講解雙核心之間如何互相協(xié)調(diào),共同發(fā)揮更大的性能。
MPC5746R采用雙CPU核心機(jī)制,兩個(gè)獨(dú)立可編程的基于e200z425的內(nèi)核0和內(nèi)核1,每個(gè)內(nèi)核主頻最高可達(dá)200M。另外還有一個(gè)基于e200z424的安全內(nèi)核用于和內(nèi)核0同步運(yùn)行,以確保程序運(yùn)行時(shí)的可靠性。
MPC5746R的兩個(gè)核心共享片內(nèi)外設(shè)及內(nèi)存單元。同時(shí)中斷控制器可以為兩個(gè)核心提供各自獨(dú)立的控制單元,使中斷請(qǐng)求可以根據(jù)用戶設(shè)置而交給不同的核心處理。
用戶可以為兩個(gè)內(nèi)核編寫各自獨(dú)立的程序,看上去就像一個(gè)系統(tǒng)運(yùn)行了兩個(gè)線程。事實(shí)也確實(shí)如此,兩個(gè)內(nèi)核并行以200M的速度執(zhí)行用戶為其各自編寫的程序,處理著各種復(fù)雜的任務(wù)。但是有時(shí)候也會(huì)出現(xiàn)一些問題導(dǎo)致不愉快的事情發(fā)生。
可以舉幾個(gè)例子:
1) 某一時(shí)刻,內(nèi)核1要往某個(gè)寄存器寫數(shù)據(jù)來執(zhí)行功能1,但不巧此時(shí)內(nèi)核0也需要往這個(gè)寄存器寫數(shù)據(jù)來執(zhí)行功能0。同時(shí)寫入沖突可能導(dǎo)致功能0和功能1都不能正常執(zhí)行,這時(shí)應(yīng)該何如避免。
2) 由于外設(shè)資源只有1份,假設(shè)用戶設(shè)定讓內(nèi)核1初始化系統(tǒng)和資源,內(nèi)核0需要在初始化完成后執(zhí)行相關(guān)功能操作,那么內(nèi)核0如何在第一時(shí)間內(nèi)知道初始化已經(jīng)完成。
3) 內(nèi)核1和內(nèi)核0合作處理復(fù)雜的算法,當(dāng)內(nèi)核0處理完了一部分算法之后想把處理結(jié)果交給內(nèi)核1,這時(shí)候彼此獨(dú)立的雙核之間如何通信。通信時(shí)間如何節(jié)省。
其實(shí)芯片在設(shè)計(jì)的時(shí)候,早已考慮好了這些問題,并做出了相應(yīng)的功能來保證雙核之間的協(xié)調(diào)運(yùn)作。基于以上的示例,我們需要了解一個(gè)重要的知識(shí)點(diǎn)叫做信號(hào)量,信號(hào)量是一種在進(jìn)程之間作用資源保護(hù)和同步的機(jī)制。
MPC5746R提供了16路的硬件信號(hào)量供用戶使用,用戶可以寫入處理器對(duì)應(yīng)的號(hào)碼以鎖定某一路信號(hào)量并且只有鎖定該信號(hào)的處理器能解鎖該信號(hào)。這樣就為處理器之間的資源訪問保護(hù)及同步提供了硬件基礎(chǔ)。
我們以具體的方法來解決上訴三個(gè)例子所面臨的問題:
1) 內(nèi)核在寫入某個(gè)寄存器之前,先檢測(cè)信號(hào)量是否鎖定,如果鎖定,等待信號(hào)解鎖再進(jìn)行操作,如果沒有鎖定,則先鎖定一個(gè)信號(hào)量,等到操作完成后,再釋放信號(hào)量,這樣就不會(huì)出現(xiàn)共享資源的訪問沖突。
2) 內(nèi)核0需要等待內(nèi)核1初始化完成之后才能進(jìn)行功能操作,即與內(nèi)核1之間進(jìn)行同步。可以在內(nèi)核1程序開始的時(shí)候,上鎖信號(hào)量,等各項(xiàng)初始化完成之后,解鎖信號(hào)量。而內(nèi)核0則在程序開始的時(shí)候就等待該信號(hào)量的解鎖,一旦解鎖,就說明初始化完成,即完成同步操作,也就解決了上訴第二個(gè)問題。
3) 兩個(gè)內(nèi)核在通信的時(shí)候,最重要的一個(gè)問題是接收方如何隨時(shí)準(zhǔn)備好接收數(shù)據(jù)而不過多消耗CPU資源。在MPC5746R中,可以通過軟中斷解決。內(nèi)核1 需要發(fā)送數(shù)據(jù)給內(nèi)核0的時(shí)候,先配置好軟件中斷的優(yōu)先級(jí),然后將中斷請(qǐng)求設(shè)置成內(nèi)核0。在數(shù)據(jù)寫入之后,觸發(fā)中斷,中斷請(qǐng)求發(fā)送至內(nèi)核0。而內(nèi)核0只要寫好相應(yīng)的中斷服務(wù)函數(shù),就能在不過多消耗CPU資源的情況下,通過中斷接收數(shù)據(jù),完成內(nèi)核間的通信。
需要注意的是,對(duì)于獨(dú)立的雙核之間通信數(shù)據(jù)的存取,MPC5746R并沒有為此單獨(dú)開辟一個(gè)空間。但是在實(shí)際應(yīng)用中,一種可行的方法是靈活的使用各通信模塊中,未使用的緩沖單元。例如CAN模塊中,最多有96個(gè)數(shù)據(jù)緩沖結(jié)構(gòu),CAN通信的過程中并不一定都會(huì)使用,我們可以根據(jù)實(shí)際需要使用幾個(gè)數(shù)據(jù)緩沖單元作為內(nèi)核間數(shù)據(jù)傳輸?shù)耐ǖ馈P枰l(fā)送數(shù)據(jù)的內(nèi)核將數(shù)據(jù)寫入指定的數(shù)據(jù)緩沖結(jié)構(gòu)體,然后觸發(fā)軟件中斷。接收一方在中斷服務(wù)函數(shù)中將數(shù)據(jù)從數(shù)據(jù)緩沖結(jié)構(gòu)體中讀取出來。可以在緩沖結(jié)構(gòu)體中設(shè)置一些標(biāo)志位來判斷讀寫是否成功。
以上就是雙核之間資源保護(hù),同步和通信的一些具體示例方法,當(dāng)然方法并不是唯一的,希望讀者在使用過程中能夠舉一反三,靈活運(yùn)用,最終達(dá)到“雙核交火,協(xié)同作戰(zhàn)”的目的。
-
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217056
原文標(biāo)題:MPC5746R “雙核交火,協(xié)同作戰(zhàn)”
文章出處:【微信號(hào):Zlgmcu7890,微信公眾號(hào):周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
在協(xié)調(diào)器和節(jié)點(diǎn)之間放置協(xié)調(diào)器能不能組網(wǎng)?
請(qǐng)問在z-stack中,終端和終端能不能互相發(fā)送消息,通過協(xié)調(diào)器轉(zhuǎn)發(fā)也可以?
【銀杏科技ARM+FPGA雙核心應(yīng)用】STM32H7系列10——ADC
【銀杏科技ARM+FPGA雙核心應(yīng)用】STM32H7系列13——SDRAM
【銀杏科技ARM+FPGA雙核心應(yīng)用】STM32H7系列15——SDIO
Intel雙核心處理器
AMD雙核心處理器
Intel CEO確認(rèn)雙核心Atom上網(wǎng)本處理器
Altera在28nm FPGA中整合雙核心ARM A9核心
聯(lián)發(fā)科揮軍雙核心市場(chǎng) 6577本月發(fā)布
微服務(wù)架構(gòu)中的服務(wù)之間如何互相調(diào)用呢?
NV-C2P10:雙核心異構(gòu) AI 硬盤錄像機(jī)

GS1-N2:雙核心異構(gòu) AI 硬盤錄像機(jī)

評(píng)論