最近玩51微控制器碰到乙個問題,51中malloc函式並不能像在pc上一樣正常執行,這涉及到了記憶體池
的概念。下面就來演示一下如何在微控制器上也可正常使用動態記憶體分配。
首先宣告乙個足夠大的陣列
char mempool[
512]
;//宣告乙個512位元組的陣列
初始化記憶體池
函式原型:
void init_mempool (void _malloc_mem_ *p, unsigned int size)
第乙個引數是乙個指向陣列名的指標(二維指標)
第二個引數是記憶體池空間大小
init_mempool (
&mempool,
sizeof
(mempool));
//注意傳遞的是陣列名位址
init_mempool、malloc函式都是在標頭檔案stdlib.h
中
//記憶體分配,比如字串記憶體動態分配
char
*str;
str =
(char*)
malloc(50
*sizeof
(char))
;//給字串str分配 50位元組空間
到此,本文結束。
這是我的第一篇部落格,大學一年已過,學了挺多,又感覺學無所成,願往後…
51微控制器內部ram
51微控制器預設的內部ram只有128位元組,52微控制器增加至256位元組,stc89c54 55 58 516等增加到1280位元組。微控制器內部ram,共256個單元,使用者使用前128個單元,用於存放可讀寫資料,後128個單元被專用暫存器占用。現在新出的51微控制器都在內部擴充套件了外部ra...
51微控制器內部資源
運算器 功能 1 從儲存器中取出下一條要執行的指令 取指 2 對取出的指令進行解碼 解碼 3 指揮運算器運算或控制資料傳送 指揮 1 pc是乙個16位專用暫存器,由cpu控制提供下一條執行指令的首位址 2 程式執行時自動加1 按順序執行 3 復位時值為0000h,程式從0開始 4 可被指令修改功能實...
記憶體動態分配
陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...