我正在使用带有SoftwareSerial的MD5库和ESP8266的Arduino mega。问题是370循环后,由于内存不足,Arduino自动重启。我使用FreeMemory进行故障排除,我注意到问题在于每个循环的可用内存减少。这是奇怪的行为,因为它只在我使用AT命令和MD5时才会出现,但是如果我在两个草图中分离草图,它们可以正常工作而不会出现内存问题。 我的原始草图是一个相当复杂的,但我减少到基本的代码示例显示波纹管为了更清晰,行为是相同的,所以如果我修复它,我将能够修复我原来的草图Arduino没有释放RAM内存
#include <SoftwareSerial.h>
#include <MemoryFree.h>
#include <MD5.h>
void setup() {
// initialize the digital pin as an output.
Serial.begin(115200);
Serial.println("Starting");
Serial1.begin(115200);
delay(200);
}
// the loop routine runs over and over again forever:
void loop() {
Serial1.println("AT");
delay(100);
Serial.println(Serial1.readString());
Serial.println("-----------");
unsigned char* hash=MD5::make_hash("hello world, this an example");
//generate the digest (hex encoding) of our hash
char *md5str = MD5::make_digest(hash, 16);
//print it on our serial monitor
Serial.println(md5str);
//Give the Memory back to the System if you run the md5 Hash generation in a loop
free(md5str);
Serial.println(freeMemory());
}
谢谢!
你确定'hash'变量不需要free'd吗? – MrEricSir
它应该吗?难道它不能将分配的内存保留下来以防以后再次需要它吗? – user4581301