




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位房屋租賃合同書
- 2025西安美術學院輔導員考試試題及答案
- 2025遼寧理工學院輔導員考試試題及答案
- 2025鹽城工業職業技術學院輔導員考試試題及答案
- 2025赤峰學院輔導員考試試題及答案
- 2025福建水利電力職業技術學院輔導員考試試題及答案
- 江蘇蘇州凌曄進出口有限公司招聘筆試題庫2025
- 內蒙古賽一建建筑工程有限公司招聘筆試題庫2025
- 四川綿陽愛聯科技股份有限公司招聘筆試題庫2025
- 社區矯正集中教育
- (五調)武漢市2025屆高三年級五月模擬訓練生物試卷(含答案)
- 安全生產月活動查找身邊安全隱患人人講安全個個會應急課件
- 江蘇省啟東市高中數學 第二章 平面向量 第6課時 2.3.2 向量的坐標表示(1)教案 蘇教版必修4
- 社會主義發展簡史智慧樹知到課后章節答案2023年下北方工業大學
- 用TOC理論提高生產制造的競爭力課件
- SketchUp (草圖大師) 基礎培訓PPT課件
- 生命線安裝方案
- 代理機構服務質量考核評價表
- 電廠保安人員管理制度
- 2018年瀘州市生物中考試題含答案
- ge核磁共振機房專用精密空調機技術要求
評論
0/150
提交評論