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

當前位置:首頁 > 芯聞號 > 充電吧
[導讀]標準C堆初始化,RVDS4.0+6410初始化C堆malloc之前試了很多次使用匯編初始化堆的方法,在KEIL上面可以,但是在RVDS4.0上面一直沒有成功,今天找到了一種直接在C中初始化堆的方法.首

標準C堆初始化,RVDS4.0+6410初始化C堆malloc



之前試了很多次使用匯編初始化堆的方法,在KEIL上面可以,但是在RVDS4.0上面一直沒有成功,今天找到了一種直接在C中初始化堆的方法.



首先匯編入口不做任何處理


;-----------------------------------------------------------------------
;跳入C語言主函數(shù)
;-----------------------------------------------------------------------
	IMPORT	main
????????BL	main
		B	.




然后在C程序中添加頭文件與編譯器指令,同時將一個函數(shù)進行實現(xiàn)


//標準C堆支持
#include?"rt_heap.h"
#pragma?import?(__use_realtime_heap)

//這個函數(shù)在rt_heap.h中聲明,需要用戶自己去實現(xiàn),返回任意值
unsigned?__rt_heap_extend(unsigned?size,?void?**block)
{
?????return?0;
}




最后在進入main函數(shù)后初始化堆空間,我用的是OK6410將內(nèi)存最后100MB設(shè)置為堆空間


_init_alloc(0x56400000,?0x60000000-8);		//初始化堆的范圍


以上就完成了堆的初始化,現(xiàn)在就可以使用malloc了,當然別忘了釋放.


在RVDS4.0里面也找到了一句簡單的說明,夠簡潔的




最后開始測試一下看看


//第一次請求堆空間
	p1?=?(u8?*)malloc(1024);
	if((int)p1?==?0)
	{
		uart_printf("malloc?error!rn");
	}
	else
	{
		uart_printf("malloc?ok?=?0x%08Xrn",p1);
	}
	
	//第二次請求堆空間
	p2?=?(u8?*)malloc(1024);
	if((int)p2?==?0)
	{
		uart_printf("malloc?error!rn");
	}
	else
	{
		uart_printf("malloc?ok?=?0x%08Xrn",p2);
	}
	
	//釋放第一次請求的堆空間
	free(p1);
	
	//第三次請求堆空間
	p3?=?(u8?*)malloc(1024);
	if((int)p3?==?0)
	{
		uart_printf("malloc?error!rn");
	}
	else
	{
		uart_printf("malloc?ok?=?0x%08Xrn",p3);
	}


結(jié)果


結(jié)果可以看到申請的堆剛好都在定義的范圍內(nèi),并且第一次申請的堆空間釋放后第三次又被申請到了.


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