質問

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());
}

そしてこれは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