色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

RT-Thread框架下的SMP支持

冬至配餃子 ? 來源:螺絲松掉的人 ? 作者:螺絲松掉的人 ? 2023-10-11 10:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言
最近報名參加了恩智浦社區的 LPC55S69 開發板測評活動,由于其搭載的是一顆 Cortex-M33 Dual Core 的 CPU,而且有大佬已經支持了 RT-Thread 的 BSP,就考慮使其支持 RT-Thread 框架下的 SMP,最近就一直在研究 SMP,并在 Raspberry-Pico 上做了一些實驗。以下是一些我在學習過程中的心得體會,不對的地方歡迎大家指正交流~

SMP 簡介
SMP: 對稱多處理(Symmetrical Multi-Processing)簡稱 SMP,是指在一個計算機上匯集了一組處理器 (多 CPU), 各 CPU 之間共享內存子系統以及總線結構。雖然同時使用多個CPU,但是從管理的角度來看,它們的表現就像一臺單機一樣。系統將任務隊列對稱地分布于多個CPU之上,從而極大地提高了整個系統的數據處理能力。RT-Thread 自 v4.0.0 版本開始支持 SMP,在對稱多核上可以通過使能 RT_USING_SMP 來開啟。

系統上電后,各 CPU 的啟動流程如下圖所示:

1.jpg

每個次級 CPU 自身硬件部分的初始化不能由 CPU0 完成,因為其自身硬件不能由其它 CPU 訪問。

關于 CPU 已經支持了 SMP 的平臺
RT-Thread 的 libcpu 中有一些芯片類型已經支持了 SMP 功能,例如 Cortex-A 系列。對于這樣的平臺,SMP 的移植工作就會簡單很多,我們只需要實現 rt_hw_secondary_cpu_up() ,secondary_cpu_c_start() ,rt_hw_secondary_cpu_idle_exec() 這三個函數即可,具體的移植介紹可以參考 RT-Thread 文檔中心SMP 介紹與移植

關于 CPU 還未支持 SMP 的平臺
RT-Thread 中還有一些 CPU 是沒有支持 SMP 的,例如 Cortex-M 系列的大部分 CPU,練手的 PICO 是 M0 ,準備開發的 LPC55S69 是 M33,都是還沒有支持 SMP 的。對于這樣的平臺移植 SMP 就會相對麻煩。除了 rt_hw_secondary_cpu_up() ,secondary_cpu_c_start() ,rt_hw_secondary_cpu_idle_exec() 這三個函數,我們還需要補充 SMP 所需要的底層支持,主要是中斷和調度部分,從而實現更加復雜的共享資源保護,以及線程間的通訊和調度。

推薦大家先去看看 RT-Thread 文檔中心的相關資料,以及這篇文章:[RT-Thread學習筆記] 中斷鎖、調度鎖與死鎖,最好再去看看 rt-threadsrc 目錄下的 scheduler.c 源碼。其中有許多 SMP 的相關實現。

CPU ID
scheduler.c 中已經有 SMP 的相關支持,但是會發現,還需要 CPU 的個數及其對應的 ID 等重要參數。所以我們首先要是實現的是 rt_hw_cpu_id() 這個函數。這個需要對應自己開發平臺的實際情況。

OS Tick
在 SMP 系統中,每個 CPU 維護自己獨立的 tick 值,用作任務運行計時以及時間片統計。除此之外,CPU0 還通過 tick 計數來更新系統時間,并提供系統定時器的功能,次級 CPU 不需要提供這些功能。這部分也是要針對使用的開發開發平臺進行配置。

處理器間中斷 IPI
處理器間中斷(Inter-Processor Interrupt)負責 CPU 之間的相互通訊及處理,針對不同開發的平臺,我們還需要實現以下函數:

/* 該函數用來向 CPU 位圖中表示的 CPU 集合發送指定編號的 IPI 信號 /
void rt_hw_ipi_send(int ipi_vector, unsigned int cpu_mask)
/
函數為當前 CPU 設置指定編號 IPI 信號的處理函數 */
void rt_hw_ipi_handler_install(int ipi_vector, rt_isr_handler_t ipi_isr_handler)
調度與同步
臨界區保護是需要特別注意的。對于 SMP 通過關中斷的方式并不能阻止多個 CPU 對共享資源的并發訪問,需要通過自旋鎖機制進行保護(在次級 CPU 啟動中就需要使用)。我們就還需要實現以下幾個函數:

rt_hw_spin_lock_init() /* 初始化已分配的 spinlock 變量 /
rt_hw_spin_lock() /
獲取 spinlock,忙等待直到獲取成功 /
rt_hw_spin_unlock() /
釋放 spinlock */
需要定義自旋鎖:

typedef union {
unsigned long slock;
struct __arch_tickets {
unsigned short owner;
unsigned short next;
} tickets;
} rt_hw_spinlock_t;
不使用 SMP 的時候,在進行調度等需要臨界資源保護的情況下,是通過 rt_hw_interrupt_disable/enable 來屏蔽中斷進行保護,但是在 SMP 中,對 rt_hw_interrupt_disable/enable 進行了替換,從而保證對共享資源訪問的互斥:

/* 在 rthw.h 中 */
#ifdef RT_USING_SMP
#define rt_hw_interrupt_disable rt_hw_local_irq_disable
#define rt_hw_interrupt_enable rt_hw_local_irq_enable
#endif
因為 SMP 使用了多核,調度和同步的情況相較于單個處理器更加復雜和重要,這部分是移植的重點。需要針對開發平臺的不同,對以下函數進行重寫(對于 Cortex-M 內核,需要注意輔助上下文切換的 PendSV 也是一種中斷):

/* 實現從當前線程切換到目標線程,在 Cortex-M 內核里 rt_hw_context_switch() 和 rt_hw_context_switch_interrupt() 功能一致 /
rt_hw_context_switch_interrupt:
rt_hw_context_switch:
/
實現沒有來源線程切換到目標線程 /
rt_hw_context_switch_to:
/
PendSV 中斷處理函數,在 Cortex-M 內核里 PendSV 輔助完成上下文切換 */
PendSV_Handler:
這部分需要在 context_gcc.S 文件中實現。

移植 SMP 的重點是調度與同步,大家在移植之前,最好對 RT-Thread 的調度流程和中斷機制有一定的學習和理解,這部分可以參考 RT-Thread 文檔中心,最好能配合著理解源碼的實現。我對 RT-Thread 框架下的 SMP 目前的理解就是以上這些,歡迎大家交流討論。

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

    關注

    68

    文章

    19882

    瀏覽量

    234934
  • SMP
    SMP
    +關注

    關注

    0

    文章

    78

    瀏覽量

    20270
  • 定時器
    +關注

    關注

    23

    文章

    3298

    瀏覽量

    118770
  • Cortex-M
    +關注

    關注

    2

    文章

    231

    瀏覽量

    30367
  • RT-Thread
    +關注

    關注

    32

    文章

    1402

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于RT-Thread的RoboMaster電控框架設計

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發。
    發表于 09-06 15:21 ?1033次閱讀

    RT-Thread SMP和AMP初體驗簡介

    還有一塊樹莓派也是多核的,RT-Thread 官方的 BSP 中也支持了這塊板子的 SMP 功能。進入 menuconfig 進行同樣的配置;env 中運行命令 scons 構建項目;將生成
    發表于 02-03 14:33

    RT-Thread框架下SMP支持

    ,就考慮使其支持 RT-Thread 框架下SMP,最近就一直在研究 SMP,并在 Raspberry-Pico 上做了一些實驗。以下是
    發表于 02-13 15:02

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本文是RT-Thread實時操作系統的編程指南
    發表于 11-26 16:06 ?0次下載

    2022 RT-Thread全球技術大會:螢石EZIOT SDK對RT-Thread支持

    2022 RT-Thread全球技術大會:RT-Thread在攝像頭及IoT設備上的實踐經驗分享
    的頭像 發表于 05-27 11:08 ?1532次閱讀
    2022 <b class='flag-5'>RT-Thread</b>全球技術大會:螢石EZIOT SDK對<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>支持</b>

    RT-Thread全球技術大會:螢石EZloT SDK對RT-Thread支持以及多芯片平臺管理策略

    RT-Thread全球技術大會:螢石EZloT SDK對RT-Thread支持以及多芯片平臺管理策略 ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發表于 05-27 11:55 ?1958次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:螢石EZloT SDK對<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>支持</b>以及多芯片平臺管理策略

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例 ? ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:21 ?1884次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>上的單元測試<b class='flag-5'>框架</b>與運行測試用例

    RT-Thread設備模型框架及創建注冊設備的實現

    RT-Thread設備模型框架及創建注冊設備的實現方式介紹如下:
    的頭像 發表于 05-28 10:38 ?2415次閱讀
    <b class='flag-5'>RT-Thread</b>設備模型<b class='flag-5'>框架</b>及創建注冊設備的實現

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> <b class='flag-5'>SMP</b> 介紹與移植

    RT-Thread文檔_utest 測試框架

    RT-Thread文檔_utest 測試框架
    發表于 02-22 18:43 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_utest 測試<b class='flag-5'>框架</b>

    淺析RT-Thread設備驅動框架

    RT-Thread 設備框架屬于組件和服務層,是基于 RT-Thread 內核之上的上層軟件。設備框架是針對某一類外設,抽象出來的一套統一的操作方法及接入標準,可以屏蔽硬件差異,為應用
    的頭像 發表于 08-07 15:39 ?2585次閱讀

    基于 RT-Thread 的 RoboMaster 電控框架(一)

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發
    的頭像 發表于 09-19 19:55 ?1191次閱讀

    基于RT-Thread的RoboMaster電控框架(二)

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包
    的頭像 發表于 09-20 15:16 ?1124次閱讀

    基于rt-thread的socket通信設計

    最近再研究 rt-thread 的通信 ,想設計出 eps8266(多個) rt-thread(作為中控) 服務器的通信框架,使用的開發板是 潘多拉
    的頭像 發表于 10-13 15:02 ?1683次閱讀
    基于<b class='flag-5'>rt-thread</b>的socket通信設計
    主站蜘蛛池模板: 992交通广播 | 九九热国产视频 | 97视频免费观看2区 97视频免费观看 | 一区二区三区福利视频 | 牲高潮99爽久久久久777 | 99在线精品免费视频 | 99精品国产高清自在线看超 | 中文字幕免费视频精品一 | 果冻传媒在线观看资源七夕 | 久久是热频国产在线 | 国产老肥熟xxxx | 丰满人妻无码AV系列 | 嫩草影院地址一二三 | 老牛天天晚上夜噜噜噜 | 甜性涩爱在线看 | 99久久精品久久久 | 一本一本之道高清在线观看 | 青青草原在线免费 | 亚州笫一色惰网站 | 91久久线看在观草草青青 | 快播看av | 久久久久久久伊人电影 | 青青草国产偷拍在线av | 亚洲国产精品嫩草影院久久 | 公和熄洗澡三级中文字幕 | 精品欧美一区二区三区四区 | 51久久成人国产精品麻豆 | 超碰在线线公开免费视频 | 午夜精品久久久久久久爽牛战 | HEYZO精品无码一区二区三区 | 高清无码中文字幕在线观看视频 | 青草影院内射中出高潮-百度 | 亚洲片在线观看 | 最新老头恋老OLDMAN | 日本十八禁无遮无挡漫画 | 午夜在线观看免费完整直播网 | 欧美性情一线免费http | 熟女强奷系列中文字幕 | 主播蜜汁丝袜精品自拍 | 少女10声大哥喊退色狼 | 国产精品手机在线视频 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品