91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

構(gòu)建RTOS Kernel指南 (下)

恩智浦MCU加油站 ? 來源:未知 ? 2023-08-03 08:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單單具有任務(wù)切換功能自然不能稱之為RTOS Kernel,一個任務(wù)往往具有多個重要的屬性,優(yōu)先級就是其中之一。一個任務(wù)的優(yōu)先級決定了它的“尊貴”程度,越尊貴的任務(wù)越有優(yōu)先占用CPU運行的權(quán)力。

1優(yōu)先級查找

位圖是指一組連續(xù)的標(biāo)志位,是一種常見的優(yōu)先級框架的實現(xiàn)方式每個比特位通常用來對應(yīng)一個優(yōu)先級,越低位的優(yōu)先級越高,其狀態(tài)標(biāo)識該優(yōu)先級是否有就緒狀態(tài)的任務(wù)。下圖32位為例,存在優(yōu)先級為1、7、9、16……24、25、31的就緒態(tài)任務(wù)。每個優(yōu)先級存在對應(yīng)的任務(wù)鏈表,同一個優(yōu)先級中采用“先就緒先執(zhí)行”的原則。wKgaomToOvSAGFZOAABhpRbvchw921.png 圖1 位圖

那么,CPU的任務(wù)從“尋找優(yōu)先級最高的任務(wù)”變成了“尋找位圖中最低位的1”。如果按照上圖中依次按位查找,速度是較慢的,系統(tǒng)的實時性可能會有一定程度的影響,下面介紹一種較為巧妙的方法——分組查表法。wKgaomToOvSAH72PAABeb4zoeNg734.png? ? ? ? ? ? ? ? ? ? ?? ? ??圖2 分組查表法

const rt_uint8_t __lowest_bit_bitmap[] =
{
    /* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 20 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 30 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 40 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 50 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 60 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 70 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 80 */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* 90 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* A0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* B0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* C0 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* D0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* E0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    /* F0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};


int __rt_ffs(int value)
{
    if (value == 0) return 0;


    if (value & 0xff)
        return __lowest_bit_bitmap[value & 0xff] + 1;


    if (value & 0xff00)
        return __lowest_bit_bitmap[(value & 0xff00) >> 8] + 9;


    if (value & 0xff0000)
        return __lowest_bit_bitmap[(value & 0xff0000) >> 16] + 17;


    return __lowest_bit_bitmap[(value & 0xff000000) >> 24] + 25;

這種方法將32位共分成4組,每組8位,那么每組的8位二進(jìn)制數(shù)0x00~0xFF對應(yīng)數(shù)組bitmap的序號0-255,數(shù)組中的值的含義為其對應(yīng)8位二進(jìn)制數(shù)最低位“1”的序號。那么通過這樣巧妙的分組查表方式,通過至多四次查找,便可得到位圖的最低位“1”的位置。除此之外,還有更為巧妙的利用匯編指令CLZ和RBIT組合實現(xiàn)這個目的,其中CLZ可以統(tǒng)計出現(xiàn)“1”的最高位位置,RBIT是數(shù)據(jù)進(jìn)行按位反轉(zhuǎn)的指令。這樣就可以先通過RBIT進(jìn)行位反轉(zhuǎn),再通過CLZ獲取反轉(zhuǎn)后最高位“1”的位置,即原數(shù)據(jù)中最低位“1”的位置。

2臨界區(qū)保護(hù)和線程同步

在RTOS中,時常會出現(xiàn)多個線程訪問公用資源的情況,即都需要訪問公用的程序片段,如若沒有對應(yīng)的處理機制,可能會對系統(tǒng)造成意想不到的混亂。常用的方法有調(diào)度器上鎖和禁止中斷,這兩者相互依賴,例如在調(diào)度器上鎖時需要禁止中斷。除此之外,還可以采用互斥機制來進(jìn)行臨界區(qū)保護(hù),如信號量和互斥量,這兩者也用于線程的同步機制。

wKgaomToOvSAeGPZAAFTZeq5SKc148.png 圖3 信號量類比

信號量可以類比停車位,當(dāng)有空車位的時候,才能開進(jìn)停車場,對于線程而言,假如某臨界資源對應(yīng)的信號量為0,是不能對其進(jìn)行操作的。信號量應(yīng)該有兩個重要的屬性:信號量值和等待隊列,信號量的值表示對應(yīng)可操作臨界資源實例數(shù),假如線程申請信號量是其值為0,那么該線程將被掛起在此信號量的等待隊列。

wKgaomToOvWAeOfHAAIRH1bLrTQ225.png

圖4 互斥量類比

互斥量的作用類似于二值信號量,它是一種特殊的信號量,只具有“上鎖”和“解鎖”兩種狀態(tài),對應(yīng)的臨界資源具有極強的排他性。就像景區(qū)的豪華單間衛(wèi)生間,每個人在使用的時候都不能被打擾。雖然功能類似,但是二值信號量和互斥量還是有區(qū)別的,后續(xù)會進(jìn)行相應(yīng)的介紹。 wKgaomToOvWAbdNTAACq08hq3PU866.png? ? ? ? ? ? ? ? ? ? 圖5 事件集工作原理 除了信號量互斥量,還有一種有趣的同步機制-事件集,它通常可以用一個32位二進(jìn)制數(shù)表示,每一位代表了一個事件,也可以說成一種觸發(fā)條件,而事件集的作用便是可以用“邏輯或”和“邏輯與”自由組合出想要觸發(fā)的條件,就好像“明天天氣好”和“我心情愉悅”都發(fā)生,“我出去郊游”才會觸發(fā),又像“發(fā)表一篇論文”或“發(fā)明一項專利”任一發(fā)生,都觸發(fā)“達(dá)成碩士畢業(yè)標(biāo)準(zhǔn)”。

3優(yōu)先級反轉(zhuǎn)問題

當(dāng)隱入互斥量的機制后,讀者可以思考一下,這會不會和優(yōu)先級機制產(chǎn)生沖突?

一個是根據(jù)優(yōu)先級制定的“國家法律”,一個是根據(jù)臨界資源制定的“地方法律”,當(dāng)遵守“地方法律“的時候會不會違背“國家法律”?這就是優(yōu)先級反轉(zhuǎn)問題。

wKgaomToOvWAZM4HAABeowHnLCY646.png? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? 圖6? 優(yōu)先級反轉(zhuǎn)

如上圖,假設(shè)我們有三個線程,它們的優(yōu)先級Thread1 > Thread2 > Thread3,t0之前Thread3獲取某資源的互斥量,互斥量值變locked狀態(tài),t0時刻Thread2線程就緒,由于優(yōu)先級Thread2 > Thread3,Thread3讓出CPU執(zhí)行權(quán)給Thread2,但沒有解開互斥量。到t1時刻,Thread1就緒,Thread2讓出CPU,Thread1執(zhí)行過程申請Thread3所占有的互斥量,由于互斥量為locked狀態(tài),在t2時刻Thread1被掛起等待,剩余兩個就緒態(tài)的線程Thread2優(yōu)先級高于Thread1,因此繼續(xù)執(zhí)行。

至此,我們發(fā)現(xiàn),都處于就緒態(tài)的線程,低優(yōu)先級的Thread2反而能比高優(yōu)先級的Thread1優(yōu)先執(zhí)行,其原因是更低優(yōu)先級的Thread3占有信號量并被搶占,造成了優(yōu)先級反轉(zhuǎn)。所以為了讓“地方法律”更加適配“國家法律”,常用的做法是優(yōu)先級繼承即可以讓Thread3短暫地提升到Thread1的優(yōu)先級,得以搶占CPU快速執(zhí)行完將互斥量解鎖,從而讓Thread1及時獲取到互斥量得以執(zhí)行。除此之外,還存在一些另外的處理方式,如優(yōu)先級天花板等,有興趣的讀者可以自行查閱相關(guān)資料。

二值信號量和互斥信號量非常類似,但還是有一些細(xì)微的差別。互斥信號量擁有優(yōu)先級繼承機制,而二值信號量沒有。互斥量必須是同一個任務(wù)申請,同一個任務(wù)釋放,其他任務(wù)釋放無效,且同一個任務(wù)可以遞歸申請。然而對于二值信號量,一個任務(wù)申請成功后,可以由另一個任務(wù)釋放,因此二值信號另更適合用于同步(任務(wù)與任務(wù)或任務(wù)與中斷的同步),互斥信號量適合用于簡單的互斥訪問。

4線程間通信

線程間通信主要是通過消息隊列和郵箱實現(xiàn),消息隊列一般采用先進(jìn)先出的原則(FIFO),而郵箱可以理解成隊列長度為1的特殊消息隊列,但是消息隊列中為待傳輸?shù)臄?shù)據(jù)按值拷貝的副本,所以支持各種類型的數(shù)據(jù)的傳遞,而郵箱中傳輸?shù)耐ǔ橹赶虼粨Q數(shù)據(jù)的指針。

5總結(jié)

至此,一個RTOS的內(nèi)核功能基本就實現(xiàn)了,下面對一個RTOS Kernel應(yīng)具備的功能進(jìn)行分條總結(jié):

實時性:實時系統(tǒng)對任務(wù)的響應(yīng)時間要求較高。具備嚴(yán)格的按優(yōu)先級調(diào)度任務(wù)的機制,并且一般要支持搶占式調(diào)度

多任務(wù)調(diào)度:RTOS需要能夠同時管理多個任務(wù),并合理分配CPU時間片給每個任務(wù)。設(shè)計任務(wù)調(diào)度算法以確保相同優(yōu)先級的任務(wù)能公平使用CPU,避免優(yōu)先級反轉(zhuǎn)問題,并提供優(yōu)先級繼承、優(yōu)先級天花板等機制。

同步和通信:多任務(wù)系統(tǒng)中,任務(wù)之間需要進(jìn)行同步和通信。設(shè)計合適的同步機制,如信號量、互斥鎖、消息隊列等,并確保在多個任務(wù)之間實現(xiàn)可靠的數(shù)據(jù)傳輸和共享。

但是,這些僅僅是內(nèi)核的基本功能,一個成熟的RTOS還應(yīng)該具有更多的擴展功能予以支撐。例如內(nèi)存管理功能、外設(shè)驅(qū)動的支持、硬件依賴性和可移植性、調(diào)試和測試功能等等。羅馬非一日而建,希望大家都能腳踏實地,樂于鉆研,樂于進(jìn)步,共勉!

END

更多恩智浦AI-IoT市場和產(chǎn)品信息,邀您同時關(guān)注“NXP客棧”微信公眾號

wKgaomToOvWAacP0AABCdkRE230894.jpg ? ? ?

NXP客棧


恩智浦致力于打造安全的連接和基礎(chǔ)設(shè)施解決方案,為智慧生活保駕護(hù)航。

長按二維碼,關(guān)注我們

恩智浦MCU加油站


這是由恩智浦官方運營的公眾號,著重為您推薦恩智浦MCU的產(chǎn)品信息、開發(fā)技巧、教程文檔、培訓(xùn)課程等內(nèi)容。

wKgaomToOvWAT-uOAAATNlPH08Y563.jpg ?

長按二維碼,關(guān)注我們


原文標(biāo)題:構(gòu)建RTOS Kernel指南 (下)

文章出處:【微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    146

    文章

    17978

    瀏覽量

    366680
  • 恩智浦
    +關(guān)注

    關(guān)注

    14

    文章

    5980

    瀏覽量

    116589

原文標(biāo)題:構(gòu)建RTOS Kernel指南 (下)

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    請問編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    請問cyw20719或cyw20721是否支持RTOS

    請確認(rèn) cyw20719 或 cyw20721 是否支持 RTOS? 我們希望使用 RTOS 控制外設(shè) SPI、I2C、PWM、ADC 等。 如果有,您有移植指南嗎?
    發(fā)表于 07-02 06:54

    有沒有關(guān)于使用英飛凌產(chǎn)品構(gòu)建充電式 VPD 設(shè)備的指南

    有沒有關(guān)于使用英飛凌產(chǎn)品構(gòu)建充電式 VPD 設(shè)備的指南? 標(biāo)準(zhǔn)中的一個例子: 目標(biāo)是維持智能手機從外部 PD 充電器的供電,同時保持與 USB 2.0 輔助設(shè)備(具體來說,是 USB-uart)的連接。 輔助設(shè)備功耗<0.1W。
    發(fā)表于 05-16 06:24

    如何獲取yocto build來構(gòu)建對設(shè)備樹的更改?

    ,在我的構(gòu)建樹中有很多這個文件的副本。我選擇了 nano/tmp/work-shared/imx8mn-lpddr4-evk/kernel-source/arch/arm64/boot/dts
    發(fā)表于 04-09 07:37

    詳解RTOS中的Hook函數(shù)

    Hook函數(shù)是RTOS中的一個關(guān)鍵特性,通過該函數(shù),用戶可以增強對任務(wù)管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?384次閱讀

    2K0300 OpenHarmony源碼構(gòu)建指南

    2K0300 OpenHarmony源碼構(gòu)建參考如下 2K0300先鋒派OpenHarmony源碼構(gòu)建指南 2K0300 源碼編譯wiki
    發(fā)表于 02-05 09:36

    VCOP Kernel-C到C7000遷移工具用戶指南

    電子發(fā)燒友網(wǎng)站提供《VCOP Kernel-C到C7000遷移工具用戶指南.pdf》資料免費下載
    發(fā)表于 11-20 13:45 ?0次下載
    VCOP <b class='flag-5'>Kernel</b>-C到C7000遷移工具用戶<b class='flag-5'>指南</b>

    深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)

    Zephyr是一個針對資源受限設(shè)備優(yōu)化的小型、可縮放、多體系架構(gòu)實時操作系統(tǒng)(RTOS)。Zephyr由Linux基金會維護(hù)[1],是一個以構(gòu)建業(yè)界最佳的RTOS為目標(biāo)的開源合作項目。近年來
    的頭像 發(fā)表于 10-22 16:47 ?2214次閱讀
    深入解析Zephyr <b class='flag-5'>RTOS</b>的技術(shù)細(xì)節(jié)

    Openharmony軟件評估指南-米爾瑞芯微RK3568開發(fā)板

    Openharmony軟件評估指南用于介紹在米爾的開發(fā)板上運行Openharmony系統(tǒng)的核心資源與外設(shè)資源的測試步驟與評估方法。本文可作為前期評估指南使用,也可以作為通用系統(tǒng)開發(fā)的測試指導(dǎo)書
    發(fā)表于 09-06 20:06

    freertos和rtos區(qū)別是什么

    FreeRTOS 和 RTOS(實時操作系統(tǒng))是兩個不同的概念,但它們之間有緊密的聯(lián)系。FreeRTOS 是一個特定的開源實時操作系統(tǒng),而 RTOS 是實時操作系統(tǒng)的一般概念。 概念定義 RTOS
    的頭像 發(fā)表于 09-02 14:18 ?3007次閱讀

    RTOS與Linux有什么區(qū)別

    RTOS(Real-Time Operating System,實時操作系統(tǒng))與Linux是兩種在不同應(yīng)用場景下發(fā)揮重要作用的操作系統(tǒng),它們在設(shè)計理念、功能特性、應(yīng)用場景以及性能表現(xiàn)等方面存在顯著差異。以下是對RTOS與Linux區(qū)別的詳細(xì)分析。
    的頭像 發(fā)表于 08-20 16:05 ?6595次閱讀

    RTOS的特性和類型

    實時操作系統(tǒng)(RTOS)是一種可運行實時計算應(yīng)用程序的軟件平臺,用于處理具有明確時間約束的事件和數(shù)據(jù)。與通用操作系統(tǒng)(GPOS)不同,RTOS必須在有限的硬件資源上調(diào)度應(yīng)用程序之間的處理和數(shù)據(jù)共享
    的頭像 發(fā)表于 08-20 11:29 ?1486次閱讀

    RTOS開發(fā)最佳實踐

    基于RTOS編寫應(yīng)用程序時,有一些要注意事項。在本節(jié)中,您將學(xué)習(xí)RTOS開發(fā)最佳實踐,例如POSIX合規(guī)性、安全性和功能安全認(rèn)證。
    的頭像 發(fā)表于 08-20 11:24 ?846次閱讀

    什么是實時操作系統(tǒng)(3)-在 RTOS 中可以期待什么?

    RTOS使用各種機制來管理任務(wù)、事件和內(nèi)存,以確保嵌入式系統(tǒng)滿足時間約束。在本節(jié)中,您將了解構(gòu)建嵌入式應(yīng)用程序時需要考慮的RTOS功能,例如確定性、空間和時間分離、調(diào)度、內(nèi)存管理和進(jìn)程間通信。
    的頭像 發(fā)表于 07-23 12:00 ?1475次閱讀
    什么是實時操作系統(tǒng)(3)-在 <b class='flag-5'>RTOS</b> 中可以期待什么?

    RTOS-SDK如何關(guān)閉系統(tǒng)的提示信息?

    您好,我使用的1.3版本的RTOS-SDK,在STA狀態(tài),連接狀態(tài)改變串口0會有提示信息產(chǎn)生,怎么樣才能將其關(guān)閉呢?
    發(fā)表于 07-22 07:04
    主站蜘蛛池模板: 免费无码看av的网站 | 男男gay污小黄文 | 天天骑夜夜操 | 在线观看一区二区三区视频 | 久操视频在线播放 | 欧美三级久久 | 天天上天天干 | 丁香六月色婷婷 | 8050网午夜一级毛片免费不卡 | 很黄很色网站 | 色婷五月综激情亚洲综合 | 天天干天天舔天天射 | аⅴ资源中文在线天堂 | 视频在线高清完整免费观看 | 高清不卡毛片 | 在线成人精品国产区免费 | 国产一二三区精品 | 人人射人人爽 | 午夜影吧 | 久精品视频村上里沙 | 天天操伊人 | 夜夜春宵翁熄性放纵古代 | 午夜黄页网站在线播放 | 日本不卡在线观看 | 韩国在线视频 | 377p亚洲欧洲日本大胆色噜噜 | 黄色免费网站在线观看 | 亚洲日本中文字幕天天更新 | 最好看最新的中文字幕1 | 天天天综合 | 最新sss华人| 日本精品一卡二卡≡卡四卡 | 婷婷色综合网 | 2021久久天天躁狠狠躁夜夜 | 婷婷在线网 | 免费在线观看a | 国产精品视频你懂的 | 精品亚洲国产国拍 | 轻点灬大ji巴太粗太长了h | 老逼影院 | 久操视频免费 |