我对编程微控制器相当陌生,我一直在使用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:实施内存泄漏修复程序。现在程序运行得好多了,我觉得很蠢。
这可能是堆碎片或者甚至可能只是内存泄漏 - 您需要对内存管理策略给予更多思考。 –