我對編程微控制器相當陌生,我一直在使用LPC1788幾個星期。LPC1788微控制器的內存分配問題
我最近遇到的一個問題是我的內存耗盡時間比我想象的要早得多。我已經測試了多少內存似乎可以通過測試多大塊連續內存我可以malloc,結果是972字節。分配從地址0x10000000開始(片上SRAM的開始,該板應該在64kB左右)。
我目前正在使用的程序是用作一個簡單的調試程序,它利用LCD並允許將消息打印到它。我有一個字符串會不斷被新消息「添加」,然後整個消息將被打印在LCD上。當屏幕上的消息長度超過垂直邊界時,它將刪除最早的消息(靠近頂部的消息),直到它適合。但是,在拒絕分配更多內存之前,我只能添加大約7條附加消息。如果需要,該項目的main.c託管在http://pastebin.com/bwUdpnD3
早些時候我也開始使用threadX RTOS創建和執行多個線程的項目。當我試圖在該程序中使用LCD時,我發現內存也非常有限。 LCD似乎存儲從SDRAM基地址開始的所有像素數據,但我不確定這與我使用的SRAM是否一樣。
我需要的是一種足夠分配內存以允許多個線程工作或存儲大字符串的方式,同時能夠使用LCD。一種可能是使用緩衝區或其他內存區域,但我不太確定如何做到這一點。任何幫助,將不勝感激。
tl; dr:嘗試在LCD上打印出大字符串時,快速耗盡SRAM上的可分配內存。
編輯1:與變量currMessage注意到內存泄漏。我認爲現在已經修復:
strcpy(&trimMessage[1], &currMessage[trimIndex+1]);
// Frees up the memory allocated to currMessage from last iteration
// before assigning new memory.
free(currMessage);
currMessage = malloc((msgSize - trimIndex) * sizeof(char));
for(int i=0; i < msgSize - trimIndex; i++)
{
currMessage[i] = trimMessage[i];
}
編輯2:實施內存泄漏修復程序。現在程序運行得好多了,我覺得很蠢。
這可能是堆碎片或者甚至可能只是內存泄漏 - 您需要對內存管理策略給予更多思考。 –