1、 文檔目標(biāo)
解決RTX5 內(nèi)存分配方式
2、 問(wèn)題場(chǎng)景
使用 RTX5 進(jìn)行內(nèi)存分配方式選擇。
3、軟硬件環(huán)境
1 軟件版本:Keil MDK 5.38a
2 電腦環(huán)境:Window 10
4、RTX5 內(nèi)存分配的三種方式
RTX5為對(duì)象提供了三種不同的內(nèi)存分配方法
1 ?Global Memory Pool(全局內(nèi)存池)。全局內(nèi)存池分配內(nèi)存區(qū)域中的所有對(duì)象。這種內(nèi)存分配方法是RTX5的默認(rèn)配置。
圖 1
在System Configuration中設(shè)置Global Dynamic Memory size;(RTX_Config.h)
當(dāng)內(nèi)存池沒(méi)有提供足夠的內(nèi)存時(shí),對(duì)象的創(chuàng)建將失敗,相關(guān)的osObjectNew()函數(shù)將返回NULL。
2? Object-specific Memory Pools(特定對(duì)象的內(nèi)存池)
特定對(duì)象的內(nèi)存池通過(guò)為每個(gè)對(duì)象類型提供專用的固定大小內(nèi)存管理來(lái)避免內(nèi)存碎片。這種類型的內(nèi)存池是完全時(shí)間確定的,這意味著對(duì)象的創(chuàng)建和銷毀總是需要相同的固定時(shí)間。由于固定大小的內(nèi)存池是特定于對(duì)象類型的,因此可以簡(jiǎn)化內(nèi)存不足情況的處理。
圖 2
為每種對(duì)象類型選擇性地啟用特定于對(duì)象的內(nèi)存池,例如:使用RTX配置文件的互斥對(duì)象或線程:
1)在線程配置中為線程對(duì)象啟用。
2)在計(jì)時(shí)器對(duì)象的計(jì)時(shí)器配置中啟用。
3)在事件對(duì)象的事件標(biāo)志配置中啟用。
4)在互斥對(duì)象的互斥配置中啟用。
5)在信號(hào)量的信號(hào)量配置中啟用。
6)已在內(nèi)存池的內(nèi)存池配置中啟用。
7)在消息隊(duì)列配置中為消息對(duì)象啟用。
當(dāng)內(nèi)存池沒(méi)有提供足夠的內(nèi)存時(shí),對(duì)象的創(chuàng)建將失敗,相關(guān)的osObjectNew()函數(shù)將返回NULL。
3? Static Object Memory(靜態(tài)對(duì)象內(nèi)存)
與動(dòng)態(tài)內(nèi)存分配相反,靜態(tài)內(nèi)存分配需要在對(duì)象編譯時(shí)分配內(nèi)存。
圖 3
靜態(tài)內(nèi)存分配可以通過(guò)在創(chuàng)建對(duì)象時(shí)使用屬性提供用戶定義的內(nèi)存來(lái)實(shí)現(xiàn)。