女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認識你,還能領取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

    瀏覽量

    63633
  • 狀態機
    +關注

    關注

    2

    文章

    493

    瀏覽量

    28022
  • STM32F103
    +關注

    關注

    33

    文章

    481

    瀏覽量

    64941
  • 內存管理
    +關注

    關注

    0

    文章

    168

    瀏覽量

    14450
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    轉:第10章 FreeRTOS任務管理

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

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

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

    基于STM32F103的SVPWM算法實現

    基于STM32F103的SVPWM算法實現
    發表于 03-22 12:12 ?90次下載

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

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

    STM32F103例程

    STM32F103例程。
    發表于 03-23 14:57 ?0次下載

    STM32F103封裝方式與功能配置

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

    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 ?9次下載
    <b class='flag-5'>STM32F103</b>的系列Ucos程序合集免費下載

    stm32f030和stm32f103功能差異

    stm32f030和stm32f103功能差異主要表現在哪?
    的頭像 發表于 07-22 09:35 ?2.3w次閱讀

    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>