RTOS uCOS-II 原理及應用 -- 6_第1頁
RTOS uCOS-II 原理及應用 -- 6_第2頁
RTOS uCOS-II 原理及應用 -- 6_第3頁
RTOS uCOS-II 原理及應用 -- 6_第4頁
RTOS uCOS-II 原理及應用 -- 6_第5頁
已閱讀5頁,還剩13頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式實時操作系統 C/OS-IITel: 85383409 (ZQL)Email: 7/20/20221第6章 內存的動態分配7/20/20222第6章 目錄1、 內存控制塊2、 動態內存的管理7/20/20223應用程序運行中有時需要臨時用到一些內存資源,操作系統應能提供相應的 “動態內存分配” 管理功能(舉例見下頁)。uC/OS-II 支持動態內存分配管理。本章主要內容:uC/OS-II動態內存管理方式;內存分區與內存控制塊;動態內存管理系統函數;7/20/20224例如:消息隊列應用中的 “消息緩沖區” 通常就是用 “動態分配的存儲塊” 實現。7/20/20225第6章 目錄1、 內存

2、控制塊2、 動態內存的管理7/20/202266.1 內存控制塊uC/OS-II中將連續的大塊內存按分區來管理,稱之為 “內存分區”。分區由若干個體積相等、類型一致的 “內存塊” 組成。uC/OS-II系統配置文件(OS_CFG.H)中的 OS_MEM_EN 用于“使能/禁能” 動態內存的功能支持。uC/OS-II使用 “內存控制塊” (MCB)具體管理內存分區以及分區中的內存塊,分區與MCB有 “一對一” 的關系。7/20/202276.1 內存控制塊ECM 是一個下述的數據結構:typedef struct void *OSMemAddr; void *OSMemFreeList; INT

3、32U OSMemBlkSize; INT32U OSMemNBlks; INT32U OSMemNFree; OS_MEM ;備注:OS_MEM 是 uC/OS-II 的系統管理資源,對用戶幾乎透明;在使用中,用戶不必對其直接操作,用戶通過系統函數管理動態內存。7/20/202286.1 內存控制塊內存中建立分區和內存塊的方法:聲明一個二位數組;使用系統函數直接創建動態分區即可;INT8U M_BLK 3080; 備注: 準備建立一個含有 30 個動態存儲塊,每個存儲塊具有 80 個 INT8U 數據類型單元的內存分區。7/20/20229第6章 目錄1、 內存控制塊2、 動態內存的管理7/

4、20/2022106.2 動態內存的管理用戶通過使用uC/OS-II提供的系統函數來使用、管理動態內存:OSMemCreate( ) - 創建動態內存分區;OSMemGet( ) - 從指定分區獲得一個內存塊;OSMemPut( ) - 將內存塊歸還指定分區;7/20/2022116.2 動態內存的管理創建動態內存分區 - OSMemCreate( )在使用一個內存分區之前,首先要使用OSMemCreate( )函數建立該分區;該系統函數的原型:OS_MEM *OSMemCreate(void *addr,/內存分區指針INT32U nblks,/分區中的內存塊總數INT32U blksize

5、,/內存塊大小INT8U *err/出錯信息);備注:函數正常返回一個 “內存分區控制塊” 指針;否則,返回一個 NULL 指針。7/20/2022126.2 動態內存的管理創建動態內存分區 - OSMemCreate( ) 舉例:OS_MEM *CommTxBuf;/聲明內存控制塊指針INT8U CommTxPart3080;/聲明內存控制塊格式void main (void) INT8U *err; OSInit( ); ; CommTxBuf = OSMemCreate(CommTxPart,30,80,err); ; OSStart( );7/20/2022136.2 動態內存的管理從

6、指定分區獲得一個內存塊 - OSMemGet( )創建了內存分區之后,既可以使用OSMemGet( )函數從指定分區獲得一個內存塊;該系統函數的原型:void *OSMemGet(OS_MEM *pmem,/內存分區控制塊指針INT8U *err/出錯信息);備注:函數正常返回一個 “內存塊” 指針;否則,返回一個 NULL 指針。在使用申請到的內存塊時,切勿越界。用完后要及時歸還。7/20/2022146.2 動態內存的管理從指定分區獲得一個內存塊 - OSMemGet( ) 舉例:OS_MEM *CommTxBuf;INT8U CommTxPart3080;INT8U err;INT8U

7、*BlkPtr;void main (void) ; OSInit( ); ; CommTxBuf = OSMemCreate(CommTxPart,30,80,&err); OSStart( );void MyTask(void *pdata) ; for (;) ; BlkPtr = OSMemGet(CommTxBuf,&err); ; /使用內存塊 BlkPtr 7/20/2022156.2 動態內存的管理將內存塊歸還制定分區 - OSMemPut( ) 在一個內存塊使用后,應使用OSMemPut( )函數盡快將內存塊歸還相應分區;該系統函數的原型:INT8U OSMemPut(OS_

8、MEM *pmem,/內存分區控制塊指針void *pblk/欲歸還的內存塊指針);備注:函數正常返回一個 OS_NO_ERR;特別注意,在歸還內存塊時,要用戶確認歸屬無誤!切勿張冠李戴!7/20/2022166.2 動態內存的管理將內存塊歸還制定分區 - OSMemPut( )舉例:OS_MEM *CommTxBuf;INT8U CommTxPart3080;INT8U err;INT8U *BlkPtr;void main (void) ; OSInit( ); ; CommTxBuf = OSMemCreate(CommTxPart,30,80,&err); OSStart( );void MyTask(void *pdata

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論