同構(gòu)(homogeneous)多核:?jiǎn)纹瑱C(jī)中,多個(gè)Core的結(jié)構(gòu)相同,各個(gè)Core用的指令集相同。 異構(gòu)(heterogeneous)多核:單片機(jī)中,多個(gè)Core的結(jié)構(gòu)不同,不同的Core架構(gòu),使用不同的指令集。
本文基于TC397+Tasking實(shí)現(xiàn)SMP(Symmetric Multi-Processing,對(duì)稱多處理),這里的多核屬于同構(gòu)多核。相對(duì)于SMP,AMP(Asymmetric Multi-Processing,非對(duì)稱多處理)主要用于異構(gòu)多核處理。
本文,主要記錄RTThread多核實(shí)現(xiàn)過程中的"雷區(qū)"。
1、RTThread多核實(shí)現(xiàn)細(xì)節(jié)
(一)各Core實(shí)現(xiàn)硬件初始化
(二)任務(wù)初始化
(三)線程間任務(wù)切換
如果不是systick觸發(fā)的線程切換,即:由于線程狀態(tài)掛起觸發(fā)的線程切換時(shí),需要判斷線程是否上鎖,如果已經(jīng)解鎖,則需要解鎖之后在進(jìn)行線程切換,避免死鎖。多核rt_hw_context_switch()的接口實(shí)現(xiàn)如下所示:
(四)中斷切換標(biāo)志置位時(shí)機(jī)
每次程序進(jìn)入系統(tǒng)心跳中斷服務(wù)例程時(shí),需要先置位中斷切換標(biāo)志Flag,完成系統(tǒng)心跳的累加后復(fù)位。注意:不同于單核處理,多核處理中,此處還需要對(duì)中斷切換進(jìn)行處理,即:判斷程序是否超時(shí),如果超時(shí),則對(duì)應(yīng)的pcpu->irq_switch_flag置位,需要進(jìn)行中斷線程切換處理。代碼實(shí)現(xiàn)如下所示:
(五)線程上鎖/解鎖操作
上鎖處理,對(duì)應(yīng)代碼實(shí)現(xiàn)如下所示:
解釋:__cmpswapw((address), ((unsigned long)value), (condition) ),上鎖處理時(shí),如果address處的值==condition,則將value值賦寫到address位置。在Tricore架構(gòu)中,__cmpswapw操作是原子操作,可以避免多核的并行訪問。
解鎖處理,對(duì)應(yīng)的代碼實(shí)現(xiàn)如下所示:
(八)確認(rèn)線程是否在目標(biāo)Core運(yùn)行
如果想確認(rèn)線程是否在目標(biāo)Core運(yùn)行,在目標(biāo)線程設(shè)置一個(gè)斷點(diǎn)(Breakpoint)即可,如下所示:
2、RTThread任務(wù)調(diào)度
(三)core1_thread_1運(yùn)行周期
2、源碼鏈接
多核與單核的切換,在rtconfig.h文件中,使能或者關(guān)閉宏RT_USING_SMP即可打開/禁用SMP。
本文的RTThread中,啟用了2個(gè)Core(主核Core0,一個(gè)從核Core1),如果需要啟用更多的從核,可以在本文的基礎(chǔ)上打開其余從核,其余從核的處理與Core1類似。
受限于時(shí)間和我的水平,本文在零零碎碎的時(shí)間里整理完,實(shí)現(xiàn)未必最優(yōu)。而且,我并未嚴(yán)格的按照RTThread的架構(gòu)處理,寫的稍微有些隨心所欲。大家可以基于我的工程進(jìn)行調(diào)試和二次開發(fā),以便于達(dá)到理解OS內(nèi)核、任務(wù)切換等相關(guān)知識(shí)。
源碼鏈接地址如下:
https://github.com/Kaixinguo2021/Tasking_TC397_MultiCore_RTThread.git
往期精彩回顧
Autosar往期精彩文章匯總:151~200
Autosar往期精彩文章匯總:201~251
NVM基礎(chǔ):解讀"切頁(yè)"的頭部信息
診斷基礎(chǔ):Event內(nèi)存管理
Autosar通信模塊COM:Update-Bits詳解
Lin總線基礎(chǔ):為什么Master節(jié)點(diǎn)需要外接上拉電阻
———————End———————
原文標(biāo)題:基于Tricore架構(gòu)的RTThread多核實(shí)現(xiàn)
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
RT-Thread
+關(guān)注
關(guān)注
31文章
1289瀏覽量
40135
原文標(biāo)題:基于Tricore架構(gòu)的RTThread多核實(shí)現(xiàn)
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論