私はMD5ライブラリでArduinoメガを使用していて、SoftwareSerialでESP8266を使用しています。問題は、370回のループの後で、メモリ不足のためにArduinoが自動的に再起動することです。トラブルシューティングにFreeMemoryを使用しましたが、問題は各ループで使用可能なメモリが減少していることに気付きました。私はMD5と一緒にATコマンドを使用するときにのみ表示されるので、それは奇妙な動作ですが、2つのスケッチでスケッチを分離すると、メモリの問題なく正しく動作します。 私の元のスケッチはかなり複雑ですが、より明確にするために例文に示されている必須のコードに還元されました。その振る舞いは同じです。私はそれを修正すれば私の元のスケッチを修正できます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'変数も自由である必要はありませんか? – MrEricSir
そうなっていますか?あとでもう一度必要とする場合に備えて、割り当てられたメモリをぶら下げておくことはできませんか? – user4581301