一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Tricore架構(gòu)的RTThread多核實(shí)現(xiàn)

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:未知 ? 2023-09-12 18:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在《基于Hightec+TC375TP的RT-Thread移植詳解》一文中,基于Tricore實(shí)現(xiàn)了單核RTThread的移植。最近,花了些時(shí)間完成遺留的任務(wù):基于Tricore的多核移植。目前,多數(shù)項(xiàng)目中的單片機(jī)都具備多核,多核單片機(jī)似乎已經(jīng)是項(xiàng)目的標(biāo)配。如果搞汽車電子,不理解OS(Operating System),似乎感覺(jué)少了什么,就好像吃面不吃蒜的感覺(jué)。對(duì)于多核,又分為同構(gòu)(homogeneous)多核和異構(gòu)(heterogeneous)多核。
  • 同構(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)過(guò)程中的"雷區(qū)"。

1、RTThread多核實(shí)現(xiàn)細(xì)節(jié)

(一)各Core實(shí)現(xiàn)硬件初始化

由于各個(gè)Core所使用的硬件資源不同,因此,各個(gè)Core在初始化時(shí),需要實(shí)現(xiàn)對(duì)應(yīng)的外設(shè)。eg:提供心跳的系統(tǒng)定時(shí)器(System Timer),本文Core1的外設(shè)初始化在Core1_init()中完成。從核除了初始化自身的硬件以外,還需要調(diào)用rt_system_scheduler_start()接口啟動(dòng)調(diào)度表,代碼示意如下所示:

提示:上述代碼中,從核(Core1)初始化了一個(gè)線程。當(dāng)然,在主核(Core0)完成所有核的線程初始化也可以。

(二)任務(wù)初始化

在Tricore架構(gòu)中,雖然不同Core使用的CSA(Context Save Areas)不同,但是,線程Thread(等同Task)的初始化可以在主核中完成,之后通過(guò)rt_thread_control()接口,為線程靜態(tài)分配控制的Core,eg:分配Core1調(diào)度led_thread_thread線程,代碼示意如下:

(三)線程間任務(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值賦寫(xiě)到address位置。在Tricore架構(gòu)中,__cmpswapw操作是原子操作,可以避免多核的并行訪問(wèn)。

解鎖處理,對(duì)應(yīng)的代碼實(shí)現(xiàn)如下所示:

注意:上鎖/解鎖必須成對(duì)出現(xiàn)。如上代碼中,上鎖/解鎖處理中都有一個(gè)while操作,這也是為什么過(guò)多的spinlock會(huì)影響CPU效率的原因。
(六)主核(Core0)與從核(Core1)同步時(shí)機(jī)
主核(Core0)與從核(Core1同步時(shí)機(jī)可以選擇在各自硬件初始化完成后進(jìn)行,否則,從核可能會(huì)訪問(wèn)到空地址,進(jìn)而進(jìn)入Trap。完成同步后,主/從核進(jìn)行線程操作,代碼示意如下:

(七)空閑線程時(shí)間片設(shè)置
本文修改了空閑線程的默認(rèn)時(shí)間片,由默認(rèn)的32tick修改為10個(gè)tick,目的:保證調(diào)度的準(zhǔn)確性。為什么這樣改?暫時(shí)未細(xì)查,留給未來(lái)。

(八)確認(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)度

本文Core0創(chuàng)建了一個(gè)主線程main_thread(周期:50ms),一個(gè)空閑線程idle[0];Core1創(chuàng)建了兩個(gè)線程led_thread_thread(周期:20ms)、core1_thread_1(周期:30ms),以及一個(gè)空閑線程idle[1]。
(一)main_thread運(yùn)行周期

(二)led_thread_thread運(yùn)行周期

(三)core1_thread_1運(yùn)行周期

提示:本文所有線程,靜態(tài)創(chuàng)建。

2、源碼鏈接

多核與單核的切換,在rtconfig.h文件中,使能或者關(guān)閉宏RT_USING_SMP即可打開(kāi)/禁用SMP。

本文的RTThread中,啟用了2個(gè)Core(主核Core0,一個(gè)從核Core1),如果需要啟用更多的從核,可以在本文的基礎(chǔ)上打開(kāi)其余從核,其余從核的處理與Core1類似。

受限于時(shí)間和我的水平,本文在零零碎碎的時(shí)間里整理完,實(shí)現(xiàn)未必最優(yōu)。而且,我并未嚴(yán)格的按照RTThread的架構(gòu)處理,寫(xiě)的稍微有些隨心所欲。大家可以基于我的工程進(jìn)行調(diào)試和二次開(kāi)發(fā),以便于達(dá)到理解OS內(nèi)核、任務(wù)切換等相關(guān)知識(shí)。

源碼鏈接地址如下:

https://github.com/Kaixinguo2021/Tasking_TC397_MultiCore_RTThread.git

往期精彩回顧




Autosar往期精彩文章匯總:1~70
Autosar往期精彩文章匯總:71~100
Autosar往期精彩文章匯總:101~150

Autosar往期精彩文章匯總:151~200

Autosar往期精彩文章匯總:201~251

CAN通信:Busoff問(wèn)題知多少

NVM基礎(chǔ):解讀"切頁(yè)"的頭部信息

診斷基礎(chǔ):Event內(nèi)存管理

Autosar通信模塊COM:Update-Bits詳解

Lin總線基礎(chǔ):為什么Master節(jié)點(diǎn)需要外接上拉電阻


點(diǎn)擊下方關(guān)注,一起聊聊Autosar/嵌入式,如果需要,聯(lián)系作者進(jìn)群,給你更專業(yè)的解答


———————End——————



點(diǎn)擊閱讀原文報(bào)名


原文標(biāo)題:基于Tricore架構(gòu)的RTThread多核實(shí)現(xiàn)

文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1385

    瀏覽量

    41675

原文標(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)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    rtthread studio的編輯器如何開(kāi)啟自動(dòng)換行功能?

    rtthread studio的編輯器如何開(kāi)啟自動(dòng)換行功能?
    發(fā)表于 06-13 08:16

    Art-Pi2的BootLoader用rtthread有什么特殊的作用嗎?

    我的基礎(chǔ)不太好,在創(chuàng)建artpi2的bootloader的例程的時(shí)候發(fā)現(xiàn)bootloader編譯完好像不小,然后發(fā)現(xiàn)bootloader里面也用上了rtthread的系統(tǒng),不太明白這里使用rtthread有沒(méi)有什么特殊的作用。
    發(fā)表于 05-27 06:08

    三種藍(lán)牙架構(gòu)實(shí)現(xiàn)方案(藍(lán)牙協(xié)議棧方案)

    藍(lán)牙架構(gòu)實(shí)現(xiàn)方案有哪幾種?我們一般把整個(gè)藍(lán)牙實(shí)現(xiàn)方案叫做藍(lán)牙協(xié)議棧,因此這個(gè)問(wèn)題也可以這么闡述:藍(lán)牙協(xié)議棧有哪些具體的架構(gòu)方案?在藍(lán)牙協(xié)議棧中,host是什么?controller是什
    的頭像 發(fā)表于 04-08 15:35 ?626次閱讀
    三種藍(lán)牙<b class='flag-5'>架構(gòu)</b><b class='flag-5'>實(shí)現(xiàn)</b>方案(藍(lán)牙協(xié)議棧方案)

    【迅為電子】10路UART、1TOPS的NPU、2路網(wǎng)口、異構(gòu)多核架構(gòu)、超高性價(jià)比!RK3562核心板強(qiáng)烈推薦

    【迅為電子】10路UART、1TOPS的NPU、2路網(wǎng)口、異構(gòu)多核架構(gòu)、超高性價(jià)比!RK3562核心板強(qiáng)烈推薦
    的頭像 發(fā)表于 03-27 11:04 ?492次閱讀
    【迅為電子】10路UART、1TOPS的NPU、2路網(wǎng)口、異構(gòu)<b class='flag-5'>多核</b><b class='flag-5'>架構(gòu)</b>、超高性價(jià)比!RK3562核心板強(qiáng)烈推薦

    請(qǐng)問(wèn)移植rtthread nano版時(shí)官網(wǎng)里面系統(tǒng)時(shí)鐘函數(shù)在哪里實(shí)現(xiàn)的?

    我在已有的華大HC32開(kāi)發(fā)板的LED例程里我找不到官網(wǎng)移植教程里的這三個(gè)函數(shù),文檔也沒(méi)說(shuō)明這三個(gè)函數(shù)的移植步驟?到底在哪里找的?是rtthread里的實(shí)現(xiàn)還是需要用戶自己找函數(shù)實(shí)現(xiàn)
    發(fā)表于 03-10 06:16

    QorIQ?T1042多核處理器

    QorIQ?T1042多核處理器T1042 QorIQ高級(jí)多核處理器綜合了數(shù)據(jù)網(wǎng)絡(luò)、電信/數(shù)據(jù)通訊、無(wú)線網(wǎng)絡(luò)基礎(chǔ)設(shè)施和國(guó)防軍事/航天工程應(yīng)用所需要的性能卓越數(shù)據(jù)線路加速及網(wǎng)絡(luò)和外圍總線接口
    發(fā)表于 01-10 08:48

    TMS320F2837xD雙核實(shí)時(shí)微控制器技術(shù)參考手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《TMS320F2837xD雙核實(shí)時(shí)微控制器技術(shù)參考手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 11-08 14:10 ?36次下載
    TMS320F2837xD雙<b class='flag-5'>核實(shí)</b>時(shí)微控制器技術(shù)參考手冊(cè)

    rtthread支持nandflash掛載fatfs文件系統(tǒng)嗎?

    rtthread支持nandflash掛載fatfs文件系統(tǒng)嗎
    發(fā)表于 09-27 09:45

    如何更新rtthread studio自帶的默認(rèn)庫(kù)?

    我用rtthread studio創(chuàng)建了一個(gè)RTThread工程后,再用STM32CubeMAX配置外設(shè),并生成代碼。但我發(fā)現(xiàn)工程使用的HAL庫(kù)并不是STM32CubeMAX提供的庫(kù),而是
    發(fā)表于 09-27 07:02

    rtthread5.0.2使用時(shí)僅使能外部rtc,會(huì)遇到獲取時(shí)間一直不變的現(xiàn)象,為什么?

    rtthread5.0.2使用時(shí)僅使能外部rtc,在使用上會(huì)遇到獲取時(shí)間(gettimeofday)一直不變的現(xiàn)象 rtthread5的框架有所變化,其中c庫(kù)中g(shù)ettimeofday等函數(shù)的實(shí)現(xiàn)
    發(fā)表于 09-26 06:36

    請(qǐng)問(wèn)AURIX TC3xx tricore架構(gòu)下浮點(diǎn)運(yùn)算和將浮點(diǎn)數(shù)小數(shù)點(diǎn)去掉變成整數(shù)來(lái)計(jì)算哪種方式更加節(jié)省算力?

    AURIX TC3xx tricore架構(gòu)下浮點(diǎn)運(yùn)算和將浮點(diǎn)數(shù)小數(shù)點(diǎn)去掉變成整數(shù)來(lái)計(jì)算哪種方式更加節(jié)省算力? 比如一個(gè)浮點(diǎn)數(shù)12.89V,如果將其寫(xiě)成12890mV,再參與計(jì)算,哪種方式更加節(jié)省算力
    發(fā)表于 08-26 06:54

    多核CPU的優(yōu)勢(shì)是什么

    多核CPU(Central Processing Unit,中央處理器)作為現(xiàn)代計(jì)算機(jī)技術(shù)的重要里程碑,其優(yōu)勢(shì)在于顯著提升了計(jì)算性能、多任務(wù)處理能力、系統(tǒng)穩(wěn)定性以及能效比等多個(gè)方面。以下將詳細(xì)闡述多核CPU的幾大優(yōu)勢(shì),并結(jié)合相關(guān)數(shù)據(jù)和背景進(jìn)行說(shuō)明。
    的頭像 發(fā)表于 08-22 14:30 ?5142次閱讀

    請(qǐng)問(wèn)rtthread的外設(shè)驅(qū)動(dòng)為什么不實(shí)現(xiàn)posix接口?

    外設(shè)驅(qū)動(dòng)想支持posix接口,如select\\poll、read、write、ioctl,希望能支持異步通知、輪詢、batch設(shè)置功能。但是rtthread在通過(guò)
    發(fā)表于 07-15 06:34

    rtthread 5.20安裝systemview 2.52a出錯(cuò)的原因?

    在 SEGGER_SYSVIEW_RTThread.c中 Info.sName = thread->name; 提示 packages/SystemView-v2.52a
    發(fā)表于 07-12 09:36

    Tricore MCU是否只能在特定時(shí)序下識(shí)別連接了OCDS?

    我使用的是 Tricore TC37x 和 TC36x。 據(jù)我所知,當(dāng)連接 OCDS 調(diào)試器時(shí),Tricore 會(huì)暫停其看門狗定時(shí)器。 我想知道的是,Tricore MCU 是否只能在特定時(shí)序下識(shí)別
    發(fā)表于 07-05 07:48