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

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

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

3天內不再提示

基于FreeRTOS的STM32F103系統—內存管理及任務調度

冬至子 ? 來源:月月望歸鳥 ? 作者:K.Fire ? 2023-11-13 11:08 ? 次閱讀

雖然現在的單片機系統,CPU的資源并不是那么緊缺了,也有豐富的內存空間,但是我們還是要積極地實現內存管理,這可以幫我們減少內存資源的占用,優化程序,提高效率。

而任務調度算法,則是幫助我們合理安排實時系統中各個任務的邏輯順序,保證各個任務按照某種規則協調有效地進行。

1

內存管理

  • 堆(heap):就是一塊空閑的內存,需要提供管理函數
  • 棧(stack):函數調用時局部變量保存在棧中,當前程序的環境也是保存在棧中

FreeRTOS 中內存管理的接口函數為:pvPortMalloc 、 vPortFree ,對應于 C 庫的 malloc 、 free。

源碼中提供了5種內存管理的方法。

1.heap_1

它只實現了pvPortMalloc,沒有實現vPortFree。

它的實現過程就是,先定義一個大數組(堆)-A,當用戶創建任務時B圖中的藍色區域被占用,創建更多任務時,如圖所示。

圖片

2.heap_2

Heap_2 使用 最佳匹配算法 (best fifit) 來分配內存,它支持vPortFree釋放內存

Heap_2 不會合并相鄰的空閑內存,所以 Heap_2 會導致嚴重的 " 碎片化 " 問題。

但是,如果申請、分配內存時大小總是相同的,這類場景下 Heap_2 沒有碎片化的問題。所以它適用于:頻繁地創建、刪除任務,但是任務的棧大小都是相同的( 創建任務時,需要分配 TCB 和棧, TCB 總是一樣的) 。

圖片

3.heap_3

Heap_3 使用標準 C 庫里的 malloc 、 free 函數,所以堆大小由鏈接器的配置決定,配置項confifigTOTAL_HEAP_SIZE 不再起作用。

4.heap_4

Heap_4 使用首次適應算法 (fifirst fifit) 來分配內存。它還會把相鄰的空閑內存合并為一個更大的空閑內存, 這有助于較少內存的碎片問題。

Heap_4 會把相鄰空閑內存合并為一個大的空閑內存,可以較少內存的碎片化問題。適用于這種場景:頻繁地分配、釋放不同大小的內存。

圖片

5.heap_5

Heap_5 分配內存、釋放內存的算法跟 Heap_4 是一樣的。相比于 Heap_4 , Heap_5 并不局限于管理一個大數組:它可以管理多塊、分隔開的內存。

嵌入式系統中,內存的地址可能并不連續,這種場景下可以使用 Heap_5 ,但需要進行初始化:確定這些內存塊在哪、多大。

內存分配失敗時的鉤子函數:

在 FreeRTOSConfifig.h 中,把宏 confifigUSE_MALLOC_FAILED_HOOK 定義為1,可以開啟使用一個鉤子函數vApplicationMallocFailedHook,當pvPortMalloc失敗后,可以在這個鉤子函數中做一些事情。

void * pvPortMalloc( size_t xWantedSize )vPortDefineHeapRegions 
{ 
...... 
#if ( configUSE_MALLOC_FAILED_HOOK == 1 ) 
{ 
    if( pvReturn == NULL ) 
    { 
        extern void vApplicationMallocFailedHook( void ); 
        vApplicationMallocFailedHook(); 
    } 
}
#endif 
return pvReturn; 
}

2

任務調度

所謂調度算法就是怎么確定哪個就緒態的任務可以切換為運行狀態。

通過配置文件 FreeRTOSConfifig.h 的兩個配置宏來配置調度算法:confifigUSE_PREEMPTION、confifigUSE_TIME_SLICING 。

  • confifigUSE_PREEMPTION:為1時,采用可搶占調度,高優先級的任務搶先執行;為0時,當一個任務正在執行時,就算一個更高優先級的任務處于Ready狀態了也不能打斷該任務的執行,除非這個任務自己停止。
  • confifigUSE_TIME_SLICING:為1時,開啟時間片調度,同優先級的任務輪流執行;為0時,
    當前任務會一直執行,直到主動放棄、或者被高優先級任務搶占。

3

總結

關于內存管理及任務調度寫這些,后面會進行常用的任務--通訊方式堆棧、隊列等的介紹。

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

    關注

    12

    文章

    485

    瀏覽量

    63495
  • 狀態機
    +關注

    關注

    2

    文章

    493

    瀏覽量

    27970
  • STM32F103
    +關注

    關注

    33

    文章

    481

    瀏覽量

    64844
  • 內存管理
    +關注

    關注

    0

    文章

    168

    瀏覽量

    14423
收藏 0人收藏

    評論

    相關推薦

    轉:第10章 FreeRTOS任務管理

    編程上來。搞清楚了這一點,那么FreeRTOS學習就算入門了。 本章教程配套的例子含Cortex-M3內核的STM32F103和Cortex-M4內核的STM32F407以及F429。
    發表于 08-23 09:54

    轉:第14章 任務調度—搶占式,時間片和合作式

    FreeRTOS版本中不會將合作式調度刪除掉,但也不會再進行升級了。 使用STM32F103,F407和F429的資源足夠多,所以此次教程
    發表于 08-30 09:55

    FreeRTOS移植到STM32F103中的步驟

    目錄一、FreeRTOS的介紹二、將FreeRTOS移植到STM32F103中的步驟1.前期準備2.在MDK下移植FreeRTOS三、創建一個基于F
    發表于 08-24 07:26

    基于STM32F103的振動監測系統設計

    基于STM32F103的振動監測系統設計。
    發表于 11-09 17:49 ?43次下載

    STM32F103封裝方式與功能配置

    本文介紹STM32F103封裝方式和STM32F103管腳功能的配置。
    發表于 08-03 17:44 ?2.2w次閱讀
    <b class='flag-5'>STM32F103</b>封裝方式與功能配置

    stm32f103寫的菜單管理程序

    stm32f103寫的菜單管理程序,支持無限嵌套程序里有使用說明,12864采用串口驅動
    發表于 07-27 16:32 ?69次下載

    STM32F103的振動監測系統設計

    STM32F103的振動監測系統設計
    發表于 09-28 14:45 ?49次下載
    <b class='flag-5'>STM32F103</b>的振動監測<b class='flag-5'>系統</b>設計

    STM32F103的汽車遠程防盜系統設計

    STM32F103的汽車遠程防盜系統設計
    發表于 09-28 15:12 ?17次下載
    <b class='flag-5'>STM32F103</b>的汽車遠程防盜<b class='flag-5'>系統</b>設計

    STM32F103使用總結

    STM32F103使用總結
    發表于 10-24 10:22 ?152次下載

    stm32f103移植

    stm32f103移植
    發表于 10-27 09:03 ?43次下載
    <b class='flag-5'>stm32f103</b>移植

    STM32F103教程之STM32F103單片機的使用心得資料免費下載

    本文檔的主要內容詳細介紹的是STM32F103教程之STM32F103單片機的使用心得資料免費下載目前很火的設計STM32教程。
    發表于 09-26 08:00 ?255次下載

    STM32F103的系列Ucos程序合集免費下載

    本文檔的主要內容詳細介紹的是STM32F103的系列Ucos程序合集免費下載包含了任務調度、信號量和郵箱、消息隊列、信息量集合軟件定時器的程序。
    發表于 04-26 08:00 ?8次下載
    <b class='flag-5'>STM32F103</b>的系列Ucos程序合集免費下載

    GD32F103STM32F103的區別 2021.6.2

    GD32F103STM32F103區別介紹關鍵詞Key words:GD32F103STM32F103摘要Abstract:本文主要是GD32F
    發表于 12-08 11:06 ?83次下載
    GD32<b class='flag-5'>F103</b>與<b class='flag-5'>STM32F103</b>的區別 2021.6.2

    RT-Thread系統移植到STM32f103

    RT-Thread系統移植到STM32f103
    發表于 12-09 12:51 ?26次下載
    RT-Thread<b class='flag-5'>系統</b>移植到<b class='flag-5'>STM32f103</b>

    STM32F103開源分享

    電子發燒友網站提供《STM32F103開源分享.zip》資料免費下載
    發表于 08-22 10:42 ?108次下載
    <b class='flag-5'>STM32F103</b>開源分享
    主站蜘蛛池模板: 猪蜜蜜网站在线观看电视剧 | 夜色55夜色66亚洲精品网站 | 日本夜爽爽一区二区三区 | 久久精品男人影院 | 超h高h肉h文教室生理课 | 秋葵app秋葵官网18在线观看 | 久久中文字幕亚洲精品最新 | 97视频久久 | 国产成人精品男人的天堂网站 | 91在线青春娱乐精品分类 | 久久久久免费视频 | 2022久久精品国产色蜜蜜麻豆 | 欧美一区二区在线观看 | 沟沟人体一区二区 | 久久夜色精品国产亚州AV卜 | 国产精品久久久久影院色 | 日韩精品一区二区亚洲AV观看 | 久久精品久久精品 | 刺激性视频黄页 | 动漫美女被到爽了流漫画 | 欧美男同gay粗大又长 | 97伦理电影在线不卡 | yy8090韩国理伦片在线 | 空姐内射出白浆10p 空姐厕所啪啪啪 | 光溜溜的美女直播软件 | FREE17一18外女破 | 在线看片成人免费视频 | 成人人观看的免费毛片 | 美女内射少妇一区二区四区 | 久久久亚洲国产精品主播 | 夜色爽爽爽久久精品日韩 | 在线观看国产亚洲 | 中文在线无码高潮潮喷在线 | 在线日韩欧美一区二区三区 | 免费无遮挡又黄又爽网站 | 丰满的美女射精动态图 | 冰山高冷受被c到哭np双性 | 强上轮流内射高NP男男 | 久久re热在线视频精69 | 久久电影午夜 | 爱暖暖1000部免费 |