2 c c++ serialization memory-leaks arduino
为我的Arduino编程(在某种C/C++的混合中),我注意到一些奇怪的东西.
每次通过串口进行通信时,我都会关注SRAM的使用情况.通常,它的范围在300到400字节之间.然而,增加一个新的程序(见下文)后,我发现它总是从300〜400字节的可用内存跃升至EXACTLY 1023我的预感是,有一个问题.
这是新常规
void NewRoutine(char *cmdd){
GSM.print(cmdd);
GSM.print(26, BYTE);
GSM.print(endl); // <-- added later
Serial.print(availableMemory());
}
Run Code Online (Sandbox Code Playgroud)
这就是MemoryCheck Routine
int availableMemory() {
int size = 1024;
byte *buf;
while ((buf = (byte *) malloc(--size)) == NULL);
free(buf);
return size;
}
Run Code Online (Sandbox Code Playgroud)
请注意:首先,它没有用.在我添加了endl命令后,它神奇地工作,但后来我注意到了内存问题.
任何人都有解决方法的想法?
你获得1023字节可用内存的原因纯粹是因为malloc(在1023上 - --1024)在第一次尝试时成功.这意味着您至少有1023个字节的内存 - 但不会告诉您真正的可用内存.
在此之前,你必须有一些保持记忆的东西.我的猜测是这里的GSM类 - 它可能将数据(cmdd + 26)保存在内联缓冲区中,该缓冲区在换行符上刷新.一旦你添加了你的endl调用,你可能会从缓冲区中获取完整的内存.
你的命令有多大?我的猜测是它(或它们的全套)可能大约700字节......