我的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字节...

其他提示

也许它保持在堆将数据传送到串行端口的缓冲器?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top