我正在開發一個嵌入式系統(ARM Cortex M3),我無法訪問任何類型的「標準庫」。特別是,我無權訪問malloc
。在沒有malloc的情況下創建內存緩衝區
我有一個函數void doStuff(uint8_t *buffer)
,它接受指向512位緩衝區的指針。我試圖做以下幾點:
uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我沒有得到預期的結果。難道我做錯了什麼?有其他方法嗎?
我正在開發一個嵌入式系統(ARM Cortex M3),我無法訪問任何類型的「標準庫」。特別是,我無權訪問malloc
。在沒有malloc的情況下創建內存緩衝區
我有一個函數void doStuff(uint8_t *buffer)
,它接受指向512位緩衝區的指針。我試圖做以下幾點:
uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我沒有得到預期的結果。難道我做錯了什麼?有其他方法嗎?
doStuff(buffer)
應該沒問題,因爲buffer
已經是和uint8_t*
。
除此之外,在您的示例中&buffer
之後,您會關閉一個括號。
如果buffer
是大小可變的,你應該通過大小爲doStuff
過,如果是固定大小的,我也想通過大小正好,你改變大小1天情況。
這是說,你應該這樣做以下方式:
uint8_t buffer[64] = {0};
int len = 64;
doStuff(buffer, len);
一個simplemalloc():有一個char MEM [MAXMEM]和一個可以自由結構的結構。然後編寫你自己的simplemalloc(),它可以找到足夠大的內存垃圾,並將偏移量返回給mem。 simplefree()然後會調整可釋放的。
EDITH:
,如果你需要大量的malloc()S,你甚至可以devide您的靜態MEM成不同的任務不同的塊(一個塊整整100byte allocs,一個堡壘自己喜歡的結構的大小等等),這將加速尋找空閒的mem。
如果你是短MEM的,你應該實現在simplemalloc一個bestmatch()(),這是一個壞sideeffect減慢執行下去。
,如果你有足夠的內存,你可以實現一個debugversion,其中「分配」有點更多的內存和開始前和simplemalloc()的MEM結束後提出XXX。在免費()你可以檢查,如果這個XXX是壞的,所以你知道你有一些緩衝區溢出或流量不足,你可以知道。
+1用於推薦自定義內存池的實現 – eckes 2012-04-19 09:40:15