日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]內(nèi)存管理,是指軟件運行時對mcu內(nèi)存資源的分配和使用的技術(shù)。主要目的是高效快速的分配使用內(nèi)存資源。在適當?shù)臅r候釋放回收內(nèi)存資源。內(nèi)存管理實現(xiàn)的方式最終是實現(xiàn)兩個函數(shù):malloc和free;malloc函數(shù)用于內(nèi)存申請,free函數(shù)用于內(nèi)存釋放。

 內(nèi)存管理簡介:

內(nèi)存管理,是指軟件運行時對mcu內(nèi)存資源的分配和使用的技術(shù)。主要目的是高效快速的分配使用內(nèi)存資源。在適當?shù)臅r候釋放回收內(nèi)存資源。內(nèi)存管理實現(xiàn)的方式最終是實現(xiàn)兩個函數(shù):malloc和free;malloc函數(shù)用于內(nèi)存申請,free函數(shù)用于內(nèi)存釋放。

內(nèi)存分配原理:

當指針P調(diào)用malloc申請內(nèi)存的時候,先判斷P要分配的內(nèi)存塊數(shù)(m),然后從n項開始,向下查找,直到找到連續(xù)的m塊空間(即對應(yīng)的內(nèi)存管理項為“0”)。然后將這m個內(nèi)存管理項的值都賦值為m(標記為占用)。,最后,把最后的內(nèi)存地址返回給指針P,完成一次內(nèi)存分配。注意:如果內(nèi)存不夠用的時候,或者沒有連續(xù)的m塊內(nèi)存時,則返回NULL給P,表示分配失敗。

內(nèi)存釋放原理:

當P申請的內(nèi)存用完后,需要釋放的時候,調(diào)用free函數(shù)實現(xiàn)。free函數(shù)先判斷P指向的內(nèi)存地址所對應(yīng)的內(nèi)存塊數(shù)m。(內(nèi)存管理項的值就是所分配的內(nèi)存塊數(shù))將這m個內(nèi)存管理項的值清零,標記釋放,完成一次內(nèi)存釋放。

關(guān)鍵代碼示例:

//內(nèi)存分配(內(nèi)部調(diào)用)

//memx:所屬內(nèi)存塊

//size:要分配的內(nèi)存大小(字節(jié))

//返回值:0XFFFFFFFF,代表錯誤;其他,內(nèi)存偏移地址

u32 mem_malloc(u32 size)

{

signed long offset=0;

u16 nmemb; //需要的內(nèi)存塊數(shù)

u16 cmemb=0;//連續(xù)空內(nèi)存塊數(shù)

u32 i;

if(!mallco_dev.memrdy)mallco_dev.init(); //未初始化,先執(zhí)行初始化

if(size==0)return 0XFFFFFFFF; //不需要分配

nmemb=size/memblksize; //獲取需要分配的連續(xù)內(nèi)存塊數(shù)

if(size%memblksize)nmemb++;

for(offset=memtblsize-1;offset>=0;offset--) //搜索整個內(nèi)存控制區(qū)

{

if(!mallco_dev.memmap[offset])cmemb++; //連續(xù)空內(nèi)存塊數(shù)增加

else cmemb=0; //連續(xù)內(nèi)存塊清零

if(cmemb==nmemb) //找到了連續(xù)nmemb個空內(nèi)存塊

{

for(i=0;i //標注內(nèi)存塊非空

{

mallco_dev.memmap[offset+i]=nmemb;

}

return (offset*memblksize); //返回偏移地址

}

}

return 0XFFFFFFFF;//未找到符合分配條件的內(nèi)存塊

}

//釋放內(nèi)存(內(nèi)部調(diào)用)

//offset:內(nèi)存地址偏移

//返回值:0,釋放成功;1,釋放失敗;

u8 mem_free(u32 offset)

{

int i;

if(!mallco_dev.memrdy)//未初始化,先執(zhí)行初始化

{

mallco_dev.init();

return 1;//未初始化

}

if(offset

{

int index=offset/memblksize; //偏移所在內(nèi)存塊號碼

int nmemb=mallco_dev.memmap[index]; //內(nèi)存塊數(shù)量

for(i=0;i //內(nèi)存塊清零

{

mallco_dev.memmap[index+i]=0;

}

return 0;

}else return 2;//偏移超區(qū)了.

}

//釋放內(nèi)存(外部調(diào)用)

//ptr:內(nèi)存首地址

void myfree(void *ptr)

{

u32 offset;

if(ptr==NULL)return;//地址為0.

offset=(u32)ptr-(u32)mallco_dev.membase;

mem_free(offset); //釋放內(nèi)存

}

//分配內(nèi)存(外部調(diào)用)

//size:內(nèi)存大小(字節(jié))

//返回值:分配到的內(nèi)存首地址.

void *mymalloc(u32 size)

{

u32 offset;

offset=mem_malloc(size);

if(offset==0XFFFFFFFF)return NULL;

else return (void*)((u32)mallco_dev.membase+offset);

}

//重新分配內(nèi)存(外部調(diào)用)

//*ptr:舊內(nèi)存首地址

//size:要分配的內(nèi)存大小(字節(jié))

//返回值:新分配到的內(nèi)存首地址.

void *myrealloc(void *ptr,u32 size)

{

u32 offset;

offset=mem_malloc(size);

if(offset==0XFFFFFFFF)return NULL;

else

{

mymemcpy((void*)((u32)mallco_dev.membase+offset),ptr,size); //拷貝舊內(nèi)存內(nèi)容到新內(nèi)存

myfree(ptr); //釋放舊內(nèi)存

return (void*)((u32)mallco_dev.membase+offset); //返回新內(nèi)存首地址

}

}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉