1

私はArduino Unoに関するプロジェクトを持っており、 Eclipseから作成しています。AVRコンパイラは私にこれを与えます:

avrdude: 24348 バイトのフラッシュ書き込み avrdude: SunAngles.hex に対してフラッシュ メモリを検証中: avrdude: 入力ファイルからフラッシュ データをロード SunAngles.hex: avrdude: 入力ファイル SunAngles.hex インテル Hex として自動検出24348 バイト avrdude: オンチップ フラッシュ データの読み取り:

読書 | #################################################### | | 100% 3.45 秒

avrdude: 検証中 ... avrdude: 24348 バイトのフラッシュが検証されました

完了しました。ありがとうございました。

シリアル モニタは何も出力しません。プロジェクトを 23999 バイトにすると、シリアル モニタが動作します。EclipseのシリアルモニターとArduino IDEのシリアルモニターを確認しました。彼らは同じ問題を抱えています。このサイトでは、Arduino Uno には 32 KB のフラッシュ メモリがあり、0.5 KB がブートローダーに使用されると書かれています。何が起こっている?

別の質問では、誰かが を使用するserial.print(F(something));と言い、pgm のライブラリを提供しています。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

3

328 の 2 KB という小さなサイズの RAM を忘れないでください。RAMが不足している可能性があります。それがなくなると、ただそこに座っているだけだということを学びました。そして、最初は本当にフラッシュ境界の問題のように見えました。あなたの症状と同じです。

ここからFreeRAM を取得するには、readme ライブラリを読むことをお勧めします。「Serial.print」がRAMとROMの両方を消費する方法について言及しています。

今はいつも使っています

Serial.print(F("HELLO"));

Serial.print("HELLO");

RAMを節約するため、これはlcd.print. いつも置いているところ

Serial.println(freeMemory(), DEC);  // Print how much RAM is available.

コードの冒頭で、注意してください。実際のコードを実行して再帰する余地が必要であることに注意してください。

F() は Arduino 1.0 に標準装備され、ライブラリ関数 getPSTR() の必要性を置き換えます。

最新の Arduino IDE は、予想される RAM 使用量の非常に大まかな見積もりも示しています。したがって、avr-gcc にはそのためのスイッチがあります。また、4.3.2 (Arduino のストック) ではなく avr-gcc 4.7.0 を使用してみてください。より最適化されていると主張されているためです。

于 2013-02-28T17:02:31.840 に答える
0

誰かがまだ同様の問題を抱えている場合に備えて備えてください:制限された Arduino メモリの管理に関するブログ投稿SRAM の最適化をお読みください。

そこから、スケッチを作成するときに覚えておくべきことがいくつかあります。

グローバル変数はできるだけ避けてください。それらをその機能に対してローカルに保ちます。

于 2016-04-11T18:22:59.533 に答える