2012-04-19 101 views
2

我正在開發一個嵌入式系統(ARM Cortex M3),我無法訪問任何類型的「標準庫」。特別是,我無權訪問malloc在沒有malloc的情況下創建內存緩衝區

我有一個函數void doStuff(uint8_t *buffer),它接受指向512位緩衝區的指針。我試圖做以下幾點:

uint8_t buffer[64] = {0}; 
doStuff((uint8_t *) &buffer)); 

但我沒有得到預期的結果。難道我做錯了什麼?有其他方法嗎?

回答

5

doStuff(buffer)應該沒問題,因爲buffer已經是uint8_t*

除此之外,在您的示例中&buffer之後,您會關閉一個括號。


如果buffer是大小可變的,你應該通過大小爲doStuff過,如果是固定大小的,我也想通過大小正好,你改變大小1天情況。

這是說,你應該這樣做以下方式:

uint8_t buffer[64] = {0}; 
int  len  = 64; 
doStuff(buffer, len); 
1

一個simplemalloc():有一個char MEM [MAXMEM]和一個可以自由結構的結構。然後編寫你自己的simplemalloc(),它可以找到足夠大的內存垃圾,並將偏移量返回給mem。 simplefree()然後會調整可釋放的。

EDITH:

,如果你需要大量的malloc()S,你甚至可以devide您的靜態MEM成不同的任務不同的塊(一個塊整整100byte allocs,一個堡壘自己喜歡的結構的大小等等),這將加速尋找空閒的mem。

如果你是短MEM的,你應該實現在simplemalloc一個bestmatch()(),這是一個壞sideeffect減慢執行下去。

,如果你有足夠的內存,你可以實現一個debugversion,其中「分配」有點更多的內存和開始前和simplemalloc()的MEM結束後提出XXX。在免費()你可以檢查,如果這個XXX是壞的,所以你知道你有一些緩衝區溢出或流量不足,你可以知道。

+0

+1用於推薦自定義內存池的實現 – eckes 2012-04-19 09:40:15

相關問題