那曲檬骨新材料有限公司

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

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

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

FreeRTOS-MPU特性說明

strongerHuang ? 來源:麥克泰技術(shù) ? 作者:麥克泰技術(shù) ? 2022-06-22 14:05 ? 次閱讀

MPU(Memory Protection Unit,內(nèi)存保護(hù)單元)在 Cortex-M內(nèi)核中是可選模塊,帶MPU的微控制器允許內(nèi)存映射(包括Flash、RAM和外圍設(shè)備)細(xì)分為若干區(qū)域,分別給每個(gè)區(qū)域分配不同的訪問權(quán)限。

FreeRTOS-MPU是FreeRTOS針對(duì)MPU實(shí)現(xiàn)的一個(gè)安全版本,支持ARMv7-M(Cortex-M3, Cortex-M4 和 Cortex-M7)和ARMv8-M (Cortex-M23和Cortex-M33)內(nèi)核的微控制器。 針對(duì)ARMv7-M的FreeRTOS移植存在兩個(gè)版本,一個(gè)支持MPU,一個(gè)不支持。針對(duì)ARMv8-M只有一個(gè)移植版本,通過編譯開關(guān)控制是否支持MPU。 FreeRTOS通過將任務(wù)分為特權(quán)和非特權(quán)運(yùn)行模式和限制對(duì)RAM、外設(shè)、可執(zhí)行代碼、任務(wù)堆棧內(nèi)存的訪問,使得應(yīng)用更健壯和安全。例如,防止代碼從RAM中執(zhí)行可以獲得巨大的好處,因?yàn)檫@樣做可以防止許多攻擊向量,如緩沖區(qū)溢出漏洞或加載到RAM中的惡意代碼的執(zhí)行。 使用MPU必然會(huì)使應(yīng)用程序設(shè)計(jì)更加復(fù)雜,首先必須確定MPU的內(nèi)存區(qū)域限制并向RTOS進(jìn)行描述,其次MPU限制應(yīng)用程序任務(wù)可以做什么和不能做什么。

MPU的策略

創(chuàng)建一個(gè)將每個(gè)任務(wù)限制在其自己的內(nèi)存區(qū)域的應(yīng)用程序可能是最安全的,但它也是設(shè)計(jì)和實(shí)現(xiàn)最復(fù)雜的。通常最好使用一個(gè)MPU來創(chuàng)建一個(gè)偽進(jìn)程和線程模型——允許線程組共享內(nèi)存空間。例如,創(chuàng)建一個(gè)可被可信的第一方代碼訪問的內(nèi)存空間,以及一個(gè)僅可被不可信的第三方代碼訪問的內(nèi)存空間。

FreeRTOS-MPU特性

兼容ARM Cortex-M3和Cortex-M4F標(biāo)準(zhǔn)移植。

可以創(chuàng)建以特權(quán)模式或非特權(quán)模式運(yùn)行的任務(wù)。非特權(quán)任務(wù)只能訪問它們自己的堆棧和最多三個(gè)用戶可定義的內(nèi)存區(qū)域(每個(gè)任務(wù)三個(gè))。用戶可定義內(nèi)存區(qū)域是在創(chuàng)建任務(wù)時(shí)分配給任務(wù)的,如果需要,可以在運(yùn)行時(shí)重新配置。

用戶可定義的內(nèi)存區(qū)域可以單獨(dú)參數(shù)化。例如,一些區(qū)域可能被設(shè)置為只讀,而另一些區(qū)域可能被設(shè)置為不可執(zhí)行(在ARM術(shù)語中簡(jiǎn)稱為XN),等等。

非特權(quán)任務(wù)之間不共享數(shù)據(jù)內(nèi)存,但非特權(quán)任務(wù)可以使用標(biāo)準(zhǔn)隊(duì)列和信號(hào)量機(jī)制相互傳遞消息。可以通過使用用戶可定義的內(nèi)存區(qū)域顯式地創(chuàng)建共享內(nèi)存區(qū)域,但是不建議這樣做。

特權(quán)模式任務(wù)可以將自己設(shè)置為非特權(quán)模式,但一旦進(jìn)入非特權(quán)模式,它就不能再將自己設(shè)置為特權(quán)模式。

FreeRTOS API位于Flash的一個(gè)區(qū)域,該區(qū)域只能在微控制器處于特權(quán)模式(調(diào)用API函數(shù)導(dǎo)致臨時(shí)切換到特權(quán)模式)時(shí)訪問。

內(nèi)核維護(hù)的數(shù)據(jù)位于RAM的一個(gè)區(qū)域,只有在微控制器處于特權(quán)模式時(shí)才能訪問。

系統(tǒng)外設(shè)只能在微控制器處于特權(quán)模式時(shí)訪問。任何代碼都可以訪問標(biāo)準(zhǔn)外設(shè)(UART等),但是可以使用可定義的內(nèi)存區(qū)域顯式地對(duì)其進(jìn)行保護(hù)。

FreeRTOS-MPU可以創(chuàng)建兩種類型的任務(wù):

特權(quán)任務(wù):特權(quán)任務(wù)可以訪問整個(gè)內(nèi)存映射。特權(quán)任務(wù)可以使用xTaskCreate()或xTaskCreateRestricted() API函數(shù)來創(chuàng)建。

非特權(quán)任務(wù):非特權(quán)任務(wù)只能訪問它的堆棧。此外,可以授予它最多三個(gè)用戶可定義內(nèi)存區(qū)域的訪問權(quán)限(每個(gè)任務(wù)三個(gè))。非特權(quán)任務(wù)只能使用xTaskCreateRestricted()創(chuàng)建。注意,xTaskCreate()不能用于創(chuàng)建非特權(quán)任務(wù)。

如果一個(gè)任務(wù)想要使用MPU,那么必須提供以下附加信息

任務(wù)堆棧的地址。

最多三個(gè)用戶可定義內(nèi)存區(qū)域的開始、大小和訪問參數(shù)。

因此,創(chuàng)建任務(wù)所需的參數(shù)總數(shù)非常大。為了使創(chuàng)建MPU任務(wù)更容易, xTaskCreateRestricted()使用了一個(gè)名為xTaskParameters的參數(shù)結(jié)構(gòu)體,通常定義為結(jié)構(gòu)常量存儲(chǔ)在Flash中,并將該結(jié)構(gòu)地址作為單個(gè)參數(shù)傳遞給xTaskCreateRestricted()。

typedef struct xTASK_PARAMTERS{  TaskFunction_t   pvTaskCode;  const signed char *  const pcName;  unsigned short   usStackDepth;  void *       pvParameters;  UBaseType_t    uxPriority;  portSTACK_TYPE * puxStackBuffer;  MemoryRegion_t  xRegions[ portNUM_CONFIGURABLE_REGIONS ];} TaskParameters_t;typedef struct xMEMORY_REGION{  void *pvBaseAddress;      /* 起始地址 */  unsigned long ulLengthInBytes;  /* 長(zhǎng)度   */  unsigned long ulParameters;   /* 訪問屬性 */} MemoryRegion_t;
7d38d546-f1e4-11ec-ba43-dac502259ad0.png

分配給任務(wù)的內(nèi)存區(qū)域可以使用vTaskAllocateMPURegions()來更改。

預(yù)定義區(qū)域和用戶可定義區(qū)域

區(qū)域0~4被內(nèi)核配置為可用的運(yùn)行環(huán)境,其中:

運(yùn)行狀態(tài)的任務(wù)可以訪問它自己的棧,但是所有其他的RAM只有當(dāng)運(yùn)行在特權(quán)模式時(shí)才可以訪問。

只有當(dāng)在特權(quán)模式下運(yùn)行時(shí),才能訪問內(nèi)核和系統(tǒng)外設(shè)所在的Flash內(nèi)存區(qū)域。

Flash內(nèi)存(除了內(nèi)核所在的內(nèi)存)和所有非系統(tǒng)外設(shè)(例如UART和模擬輸入)都可以被特權(quán)和用戶模式任務(wù)訪問。

內(nèi)核在每次上下文切換期間都會(huì)重新配置MPU,因此每個(gè)任務(wù)可以不同地定義其余三個(gè)區(qū)域。

區(qū)域起始地址和大小限制

MPU硬件強(qiáng)加了兩個(gè)規(guī)則,區(qū)域起始地址和大小定義必須遵守:

1、區(qū)域大小必須是32字節(jié)到4G(包括)之間的二進(jìn)制的2次方。例如,32字節(jié)、64字節(jié)、128字節(jié)、256字節(jié)等等都是有效的區(qū)域大小。

2、起始地址必須是區(qū)域大小的倍數(shù)。例如,一個(gè)配置為65536字節(jié)長(zhǎng)的區(qū)域必須從能被65536整除的地址開始。

FreeRTOS-MPUAPI

1、xTaskCreateRestricted()xTaskCreate()的擴(kuò)展版本,用于創(chuàng)建執(zhí)行權(quán)限受限或者內(nèi)存訪問權(quán)限受限的任務(wù)。

xTaskCreateRestricted()需要xTaskCreate()使用的所有參數(shù),加上四個(gè)額外的參數(shù)來定義三個(gè)任務(wù)特定的MPU區(qū)域和一個(gè)堆棧緩沖區(qū)。如果在普通函數(shù)參數(shù)列表中使用這個(gè)數(shù)量的參數(shù)會(huì)很麻煩,而且可能會(huì)大量使用堆棧空間。xTaskCreateRestricted()將一個(gè)指向xTaskParameters結(jié)構(gòu)的指針作為其兩個(gè)參數(shù)之一,第二個(gè)參數(shù)用于向創(chuàng)建的任務(wù)傳遞句柄,與xTaskCreate()參數(shù)相同。如果不需要任務(wù)句柄, pxCreatedTask可以設(shè)置為NULL。

portBASE_TYPE xTaskCreateRestricted( xTaskParameters *pxTaskDefinition,

xTaskHandle *pxCreatedTask );

2、vTaskAllocateMPURegions()定義一組內(nèi)存保護(hù)單元(MPU)區(qū)域,供受MPU限制的任務(wù)使用。如果創(chuàng)建任務(wù)時(shí)沒有分配MPU區(qū)域,可以在運(yùn)行時(shí)使用vTaskAllocateMPURegions()函數(shù)重新分配。

void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,

const MemoryRegion_t * const xRegions );

3、特權(quán)模式任務(wù)可以調(diào)用portSWITCH_TO_USER_MODE()將自己設(shè)置為非特權(quán)模式。在非特權(quán)模式下運(yùn)行的任務(wù)不能設(shè)置為特權(quán)模式。

原文標(biāo)題:FreeRTOS MPU使系統(tǒng)更健壯!

文章出處:【微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    48

    文章

    7649

    瀏覽量

    152107
  • MPU
    MPU
    +關(guān)注

    關(guān)注

    0

    文章

    375

    瀏覽量

    48949
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62395
  • Cortex-M3
    +關(guān)注

    關(guān)注

    9

    文章

    270

    瀏覽量

    59589

原文標(biāo)題:FreeRTOS MPU使系統(tǒng)更健壯!

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何優(yōu)化MPU的能耗

    選擇合適的低功耗MPU。不同的MPU在工作模式下有不同的功耗表現(xiàn),包括活動(dòng)模式、睡眠模式和待機(jī)模式等。選擇具有低功耗特性MPU是優(yōu)化能耗的基礎(chǔ)。 電源管理 : 使用低功耗的電源管理芯
    的頭像 發(fā)表于 01-08 09:41 ?155次閱讀

    MPU的性能評(píng)估方法

    MPU(Microprocessor Unit,微處理器單元)的性能評(píng)估是確保其在實(shí)際應(yīng)用中能夠滿足需求的重要環(huán)節(jié)。以下是一些常用的MPU性能評(píng)估方法: 一、基準(zhǔn)測(cè)試(Benchmark
    的頭像 發(fā)表于 01-08 09:39 ?149次閱讀

    MPU與數(shù)字信號(hào)處理的關(guān)系

    在數(shù)字化時(shí)代,微處理器單元(MPU)和數(shù)字信號(hào)處理(DSP)技術(shù)已經(jīng)成為實(shí)現(xiàn)復(fù)雜計(jì)算和數(shù)據(jù)處理任務(wù)的關(guān)鍵技術(shù)。MPU作為計(jì)算機(jī)系統(tǒng)的大腦,負(fù)責(zé)執(zhí)行程序指令和處理數(shù)據(jù),而DSP則專注于高效地處理信號(hào)
    的頭像 發(fā)表于 01-08 09:29 ?182次閱讀

    MPU在嵌入式系統(tǒng)中的應(yīng)用

    一、MPU的基本功能 微處理器單元(MPU)是嵌入式系統(tǒng)中的大腦,負(fù)責(zé)執(zhí)行程序指令、處理數(shù)據(jù)和控制其他硬件設(shè)備。MPU的基本功能包括: 指令執(zhí)行:MPU能夠從存儲(chǔ)器中讀取指令,解碼這些
    的頭像 發(fā)表于 01-08 09:26 ?205次閱讀

    MPU與MCU的區(qū)別

    在現(xiàn)代電子系統(tǒng)中,微處理器單元(MPU)和微控制器單元(MCU)扮演著至關(guān)重要的角色。它們是計(jì)算機(jī)和其他電子設(shè)備的核心,負(fù)責(zé)處理數(shù)據(jù)和執(zhí)行程序。盡管兩者在某些方面有相似之處,但它們?cè)谠O(shè)計(jì)、功能
    的頭像 發(fā)表于 01-08 09:25 ?331次閱讀

    什么是MPU控制器及其應(yīng)用

    MPU控制器是現(xiàn)代電子系統(tǒng)中不可或缺的組成部分,它們?cè)诟鞣N設(shè)備中扮演著核心角色,從簡(jiǎn)單的嵌入式系統(tǒng)到復(fù)雜的計(jì)算機(jī)和服務(wù)器。MPU控制器的設(shè)計(jì)旨在提供高效、可靠的數(shù)據(jù)處理能力,同時(shí)保持較低的功耗和成本
    的頭像 發(fā)表于 01-08 09:23 ?203次閱讀

    MPU微處理器的工作原理

    在現(xiàn)代電子設(shè)備中,微處理器(MPU)扮演著至關(guān)重要的角色。從個(gè)人電腦到智能手機(jī),再到嵌入式系統(tǒng),MPU都是實(shí)現(xiàn)復(fù)雜計(jì)算任務(wù)的關(guān)鍵。 MPU的基本結(jié)構(gòu) MPU的核心是中央處理單元(CPU
    的頭像 發(fā)表于 01-07 18:08 ?496次閱讀

    軟啟動(dòng):TPS2373X特性說明

    電子發(fā)燒友網(wǎng)站提供《軟啟動(dòng):TPS2373X特性說明.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 11:20 ?0次下載
    軟啟動(dòng):TPS2373X<b class='flag-5'>特性</b><b class='flag-5'>說明</b>

    在TM4C MCU上用FreeRTOS開發(fā)通用應(yīng)用程序應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《在TM4C MCU上用FreeRTOS開發(fā)通用應(yīng)用程序應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 09-11 14:15 ?0次下載
    在TM4C MCU上用<b class='flag-5'>FreeRTOS</b>開發(fā)通用應(yīng)用程序應(yīng)用<b class='flag-5'>說明</b>

    freertos最多支持多少個(gè)任務(wù)

    FreeRTOS是一個(gè)輕量級(jí)的實(shí)時(shí)操作系統(tǒng)(RTOS),其設(shè)計(jì)初衷就是為了提供簡(jiǎn)單、可靠且高效的實(shí)時(shí)任務(wù)管理。關(guān)于FreeRTOS最多支持多少個(gè)任務(wù)的問題,實(shí)際上并沒有一個(gè)固定的上限,這主要取決于
    的頭像 發(fā)表于 09-02 14:21 ?1183次閱讀

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

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

    瑞薩RZ/T系列MPU的中斷重入實(shí)現(xiàn)

    基于Arm的RZ/T系列MPU通過工業(yè)以太網(wǎng)通信提供高性能和高速實(shí)時(shí)控制,為自動(dòng)化市場(chǎng)構(gòu)建高性能系統(tǒng)。RZ/T MPU和RZ/N MPU均基于類似的硬件架構(gòu)開發(fā)而成,并共享相同的軟件環(huán)境,可實(shí)現(xiàn)可
    的頭像 發(fā)表于 07-23 14:47 ?663次閱讀
    瑞薩RZ/T系列<b class='flag-5'>MPU</b>的中斷重入實(shí)現(xiàn)

    HPM SDK 1.6.0 FreeRTOS LTS更改及適配指南

    1、HPM_SDKFreeRTOSLTS特性總覽HPMSDKV1.6.0中FreeRTOS升級(jí)前后特性支持對(duì)比:特性V10.4.4LTS202210.01中斷搶占√√RISCV浮點(diǎn)擴(kuò)展
    的頭像 發(fā)表于 07-06 08:17 ?4002次閱讀
    HPM SDK 1.6.0 <b class='flag-5'>FreeRTOS</b> LTS更改及適配指南

    產(chǎn)品簡(jiǎn)介 | RZ/A系列MPU

    產(chǎn)品簡(jiǎn)介 | RZ/A系列MPU
    的頭像 發(fā)表于 05-24 08:06 ?485次閱讀
    產(chǎn)品簡(jiǎn)介 | RZ/A系列<b class='flag-5'>MPU</b>

    淺析FreeRTOS任務(wù)調(diào)度器的三種調(diào)度算法和應(yīng)用

    FreeRTOS在MCU領(lǐng)域應(yīng)用非常廣泛,今天就給大家講解一下FreeRTOS調(diào)度器中的三種調(diào)度算法,以及在瑞薩RZ/T2L MPU中的應(yīng)用。
    的頭像 發(fā)表于 05-10 14:02 ?7813次閱讀
    淺析<b class='flag-5'>FreeRTOS</b>任務(wù)調(diào)度器的三種調(diào)度算法和應(yīng)用
    百家乐网投注| E乐博| 真人百家乐海立方| 百家乐官网下对子的概率| 竞咪百家乐的玩法技巧和规则| 新西兰百家乐官网的玩法技巧和规则| 百家乐官网的赚钱原理| 九头鸟棋牌游戏中心| 新澳博百家乐娱乐城| 永利博百家乐官网的玩法技巧和规则| 百家乐官网赢钱好公式| 澳门网上赌场| 24山水口决阳宅| 百家乐官网赌博破解方法| 海宁市| 易玩棋牌怎么样| 大发888游戏下载中心| 百家乐园选百利宫| 游戏百家乐押发| 百家乐官网qq游戏| 开心8百家乐官网娱乐城| 巴楚县| 顶级赌场官网下载| 速博百家乐的玩法技巧和规则 | 百家乐官网双龙| 百家乐官网稳中一注法| 家居| 电动扑克| 大发888 迅雷下载| 百家乐都是什么人玩的| 百家乐板路| 专业百家乐筹码| 8运24山风水图解| 百家乐官网科学| 海立方百家乐官网海立方| 百家乐官网实战案例| e世博娱乐| 六合彩管家婆| 久胜线上娱乐| 大发888xp缺少casino| 威尼斯人娱乐城演唱会|