国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Tricore架構的RTThread多核實現

RTThread物聯網操作系統 ? 來源:未知 ? 2023-09-12 18:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在《基于Hightec+TC375TP的RT-Thread移植詳解》一文中,基于Tricore實現了單核RTThread的移植。最近,花了些時間完成遺留的任務:基于Tricore的多核移植。目前,多數項目中的單片機都具備多核,多核單片機似乎已經是項目的標配。如果搞汽車電子,不理解OS(Operating System),似乎感覺少了什么,就好像吃面不吃蒜的感覺。對于多核,又分為同構(homogeneous)多核和異構(heterogeneous)多核。
  • 同構(homogeneous)多核:單片機中,多個Core的結構相同,各個Core用的指令集相同。
  • 異構(heterogeneous)多核單片機中,多個Core的結構不同,不同的Core架構,使用不同的指令集。

本文基于TC397+Tasking實現SMP(Symmetric Multi-Processing,對稱多處理),這里的多核屬于同構多核。相對于SMP,AMP(Asymmetric Multi-Processing,非對稱多處理)主要用于異構多核處理。

本文,主要記錄RTThread多核實現過程中的"雷區"。

1、RTThread多核實現細節

(一)各Core實現硬件初始化

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

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

(二)任務初始化

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

(三)線程間任務切換

如果不是systick觸發的線程切換,即:由于線程狀態掛起觸發的線程切換時,需要判斷線程是否上鎖,如果已經解鎖,則需要解鎖之后在進行線程切換,避免死鎖。多核rt_hw_context_switch()的接口實現如下所示:

(四)中斷切換標志置位時機

每次程序進入系統心跳中斷服務例程時,需要先置位中斷切換標志Flag,完成系統心跳的累加后復位。注意:不同于單核處理,多核處理中,此處還需要對中斷切換進行處理,即:判斷程序是否超時,如果超時,則對應的pcpu->irq_switch_flag置位,需要進行中斷線程切換處理。代碼實現如下所示:

(五)線程上鎖/解鎖操作

上鎖處理,對應代碼實現如下所示:

解釋:__cmpswapw((address), ((unsigned long)value), (condition) ),上鎖處理時,如果address處的值==condition,則將value值賦寫到address位置。在Tricore架構中,__cmpswapw操作是原子操作,可以避免多核的并行訪問。

解鎖處理,對應的代碼實現如下所示:

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

(七)空閑線程時間片設置
本文修改了空閑線程的默認時間片,由默認的32tick修改為10個tick,目的:保證調度的準確性。為什么這樣改?暫時未細查,留給未來。

(八)確認線程是否在目標Core運行

如果想確認線程是否在目標Core運行,在目標線程設置一個斷點(Breakpoint)即可,如下所示:

2、RTThread任務調度

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

(二)led_thread_thread運行周期

(三)core1_thread_1運行周期

提示:本文所有線程,靜態創建。

2、源碼鏈接

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

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

受限于時間和我的水平,本文在零零碎碎的時間里整理完,實現未必最優。而且,我并未嚴格的按照RTThread的架構處理,寫的稍微有些隨心所欲。大家可以基于我的工程進行調試和二次開發,以便于達到理解OS內核、任務切換等相關知識。

源碼鏈接地址如下:

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問題知多少

NVM基礎:解讀"切頁"的頭部信息

診斷基礎:Event內存管理

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

Lin總線基礎:為什么Master節點需要外接上拉電阻


點擊下方關注,一起聊聊Autosar/嵌入式,如果需要,聯系作者進群,給你更專業的解答


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



點擊閱讀原文報名


原文標題:基于Tricore架構的RTThread多核實現

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT-Thread
    +關注

    關注

    32

    文章

    1613

    瀏覽量

    44823

原文標題:基于Tricore架構的RTThread多核實現

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    DR1 系列核心板 PS+PL 異構多核實戰案例手冊(二)

    本文為創龍科技DR1 系列評估板 PS+PL 異構多核開發指南,涵蓋 9 類核心案例與關鍵技術實現。核心內容包括 AXI 總線與 PS_PLIO 兩種通信方式,涉及 GPIO 控制、串口 / CAN
    的頭像 發表于 01-14 17:23 ?4599次閱讀
    DR1 系列核心板 PS+PL 異構<b class='flag-5'>多核實</b>戰案例手冊(二)

    DR1 系列核心板 PS+PL 異構多核實戰案例手冊(一)

    本文為創龍科技DR1 系列評估板 PS+PL 異構多核開發指南,涵蓋 9 類核心案例與關鍵技術實現。核心內容包括 AXI 總線與 PS_PLIO 兩種通信方式,涉及 GPIO 控制、串口 / CAN
    的頭像 發表于 01-14 15:37 ?164次閱讀
    DR1 系列核心板 PS+PL 異構<b class='flag-5'>多核實</b>戰案例手冊(一)

    如何通過交替式幾何處理實現更優的多核?GPU?擴展

    在理論上,通過增加更多GPU核心來提升性能似乎很簡單:核心越多,性能越強。但在實踐中,這是圖形架構領域最棘手的挑戰之一。雖然某些工作負載因其獨立特性能實現良好擴展,但另一些工作負載(尤其是幾何
    的頭像 發表于 12-01 10:12 ?638次閱讀
    如何通過交替式幾何處理<b class='flag-5'>實現</b>更優的<b class='flag-5'>多核</b>?GPU?擴展

    RTThread支持內存保護功能嗎?

    以前在其他視頻里看過說單片機可以實現線程崩潰不會影響系統運行, 我一直不知道怎么實現的, 最近了解到 MPU和Zephyr的內存保護, 這些在RTthread中可以實現
    發表于 10-14 07:14

    CherryUSB和RTThread自帶的USB如何合理使用?

    RTThread自帶了很多的USB的功能,但是我在想如果使用CherryUSB是否比使用 自帶的更好。 所以我的操作一開始是這樣的 1、RTThread使能自帶的USB,使能了大容量設備MSC,測試正常
    發表于 10-13 07:52

    請問在移植rtthread nano版時官網里面系統時鐘函數在哪里實現的?

    我在已有的華大HC32開發板的LED例程里我找不到官網移植教程里的這三個函數,文檔也沒說明這三個函數的移植步驟?到底在哪里找的?是rtthread里的實現還是需要用戶自己找函數實現
    發表于 09-26 08:09

    RTthread怎么加載zynq的支持包?

    RTthread有xilinx zynq的芯片支持包了么,SDK管理器里面怎么下載ZYNQ的支持包呢?求助
    發表于 09-23 06:05

    移植RTThread多核如何開始(ZYNQ US 64位 A53)?

    想請教一下各位前輩如何移植RTThread多核平臺上,需要注意的問題和學習路線。
    發表于 09-22 07:25

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

    我的基礎不太好,在創建artpi2的bootloader的例程的時候發現bootloader編譯完好像不小,然后發現bootloader里面也用上了rtthread的系統,不太明白這里使用rtthread有沒有什么特殊的作用。
    發表于 09-22 06:28

    rtthread 5.20 安裝 systemview 2.52a 出錯的原因?

    在 SEGGER_SYSVIEW_RTThread.c中 Info.sName = thread->name; 提示 packages
    發表于 09-16 08:20

    RTTHREAD stdio 2.2.9 為什么不能導入 BSP?

    RTTHREAD stdio 2.2.9不能導入 BSP
    發表于 09-11 07:07

    TC3XX /TC1.6.2OCDS如何通過軟件啟用核心調試控制器?

    如何通過軟件啟用核心調試控制器?也就是說可以通過軟件讀取DBGSR.DE =1。參考TriCore? TM TC1.6.2 核心架構手冊第 1 卷。
    發表于 07-30 06:27

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

    我的基礎不太好,在創建artpi2的bootloader的例程的時候發現bootloader編譯完好像不小,然后發現bootloader里面也用上了rtthread的系統,不太明白這里使用rtthread有沒有什么特殊的作用。
    發表于 05-27 06:08

    【迅為電子】10路UART、1TOPS的NPU、2路網口、異構多核架構、超高性價比!RK3562核心板強烈推薦

    【迅為電子】10路UART、1TOPS的NPU、2路網口、異構多核架構、超高性價比!RK3562核心板強烈推薦
    的頭像 發表于 03-27 11:04 ?1192次閱讀
    【迅為電子】10路UART、1TOPS的NPU、2路網口、異構<b class='flag-5'>多核</b><b class='flag-5'>架構</b>、超高性價比!RK3562核心板強烈推薦

    請問移植rtthread nano版時官網里面系統時鐘函數在哪里實現的?

    我在已有的華大HC32開發板的LED例程里我找不到官網移植教程里的這三個函數,文檔也沒說明這三個函數的移植步驟?到底在哪里找的?是rtthread里的實現還是需要用戶自己找函數實現
    發表于 03-10 06:16