C / C ++内存问题?
-
10-07-2019 - |
题
我的Arduino编程(在某种C / C ++的混合),我发现了一些奇怪的。
每次我通过串行端口进行通信,我保持对SRAM的使用的眼睛。通常情况下,它的范围300 400之间〜字节。 然而,增加一个新的程序(见下文)后,我发现它总是从300〜400字节的可用内存跃升至的完全的1023我的预感是,有一个问题。
这是新的常规
void NewRoutine(char *cmdd){
GSM.print(cmdd);
GSM.print(26, BYTE);
GSM.print(endl); // <-- added later
Serial.print(availableMemory());
}
和这是MemoryCheck例程
int availableMemory() {
int size = 1024;
byte *buf;
while ((buf = (byte *) malloc(--size)) == NULL);
free(buf);
return size;
}
请注意这样的:首先,它没有工作。我加入了ENDL命令后,它的工作神奇,但后来我发现内存问题。
任何人都有想法,一个解决办法?
解决方案
你得到1023个字节的可用内存的原因纯粹是因为的malloc(1023 - 这是--1024)是第一次尝试成功。这意味着你的内存至少1023个字节 - 但并没有告诉你真正的可用内存
在此之前,你必须有一些保持周围的内存。我的猜测是这里的GSM类 - 它可能保存在其中一个换行符刷新内部缓存中的数据(CMDD + 26)。只要你加入您的通话ENDL,你可能会从缓存获取完整的内存了。
有多大你的命令?我的猜测是,它(或全套他们)大概在700字节...
其他提示
也许它保持在堆将数据传送到串行端口的缓冲器?
不隶属于 StackOverflow