arduinoでプログラムメモリを拡張する方法は?

arduinoに入れたい組み込みCプログラムのプログラムサイズのスペースが足りなくなることがあります。では、arduinoでより大きなCプログラムを使用できるようにするには、arduinoのプログラムメモリを拡張するためにどのチップが必要ですか?

コメント

  • 検討中そのペトリH ä kkinen という名前の仲間が Atmega328Pのアーケードスタイルのゲーム、コードのスペースを節約することを検討する必要がありますか?それが'実用的でない場合は、いくつかの回答が示すように、より多くのプログラムメモリを備えたより大きなチップを入手できます。たとえば、Atmega644はDIPチップパッケージで提供されます。
  • forum.arduino.cc / index.php?topic =も参照してください。 226465.0
  • あなたの答えをもう少し説明していただけますか? 2)ArduinoにはSPIがあるため、SDカードにアクセスできます。 SDカード上のコードはすべて実行可能メモリにロードする必要があります。これは複雑で初心者向けではありません…プログラムの実行中に命令メモリを変更または再プログラムできるということですか?実行中のプログラムはブートローダーを呼び出して、別のアドレスに新しい命令をロードできますか? ´この年齢でプログラムメモリを獲得しましたか?別の解決策は、プログラム内のルーティンを識別し、すべての"呼び出し´ s "データをspi外部メモリに保存…ありがとうございます!

回答

ATmega2560はUnoのプログラムメモリが不足したときにメモリを追加するためのチップ。 arduino.ccのメモリのWebページを参照すると、Flash = 256KB、SRAM = 8KB、EEPROM = 4KBであり、ATmega328チップが搭載されていることがわかります。 UnoにはFlash = 32KB、SRAM = 2KB、EEPROM = 1KBがあります。

Unoでプログラムメモリが不足した場合、実用的な選択肢は約3つあります。プログラムを小さくする、ブートローダーを削除する。 (1つまたは2つのKBを解放するため);より高性能なプロセッサを搭載した別のボードを使用します。UnoボードのCPUには、オンチップの32KBフラッシュ以外の場所からプログラムバイトにアクセスする方法がありません。 Mega2560ボードのCPUは8倍のフラッシュで起動するため、Unoよりも大きなプログラムを保持できます。

ブートローダーを削除すると、説明のように、代わりにUSBASPボードを使用してプログラムできます。 Learningaboutelectronics.comの「10ピンケーブル付きUSBASPを使用したAVRチップのプログラム」の記事。

コメント

  • しかし、ブートローダーを解放した場合、arduino IDEを使用してプログラムするにはどうすればよいですか?
  • @ qwerty10、編集の最後の段落を参照してください。 ArduinoIDEはUSBASPokをサポートしています。
  • ATMEGAにコードをアップロードできるプログラマーでは動作しませんか? USBASPだけではなく。私が理解しているように、実際には10ピンではなく、それらのピンのサブセットを使用しています。
  • @ qwerty10、USPASPはISP(システムプログラミング)プログラマーです。一般に、MOSI、MISO、SCK、RST、VCC、およびGNDピンがターゲットチップで使用可能である限り、任意のISPプログラマーを使用してチップをプログラムできます(ブートローダーの有無にかかわらず)。
  • 現在のUnosは、非常にコンパクトなoptibootブートローダーを使用しています。それを削除すると、512バイトしか解放されません。

回答

別の方法(メモリが多いMCU以外)はArduinoフレームワークとそのライブラリを使用していません。このようなレベルの抽象化は、メモリ使用量と速度の両方の点でコストがかかります。しかし、それははるかに難しい方法です。ライブラリが必要な場合は、それを移植するか(ネイティブライブラリが見つからない場合)、少なくともArduinoから必要な機能を提供する必要があります。

たとえば、ArduinoIDEで1.6.11空のスケッチは444バイトのフラッシュを使用しています。 1つのpinModedigitalWrite(13, ! digitalRead(13)); + delay(500);を使用すると964バイトになります。もちろん、これらはおそらく1回限りです。さらに6つのピンを使用して切り替えると、最初のピン(1192B)を使用するよりもはるかに少ないプログラムメモリを使用します。しかし、それでも非常に速く成長します。

純粋なCでは、空のプログラムの長さは約134バイトです。同じ機能(500ミリ秒ごとに1つのピンを切り替える)には158バイトかかります(そしてそれははるかに高速です)。

しかし、趣味のプロジェクトでは、代わりにATMega2560またはATMega644 / 1284を使用します。

また、ハードウェアへの直接アクセスも使用できます。レジスタを直接使用してピンスケッチを切り替えると、avrライブラリの_delay_msは964Bではなく468バイトを使用します。Arduinoコアライブラリからの遅延により、602Bになります。

コメント

  • つまり_delay_ms()です。
  • これには、実際にmcuについて学習するという追加の利点があります'を使用しています。これらのArduinoのAVRは、"標準ライブラリ"よりもはるかに優れています。++

回答

ラズベリーパイはどうですかゼロ?私にはカップルがいて、それらをarduinoとして頻繁に使用しています。

コメント

  • 他のアーキテクチャも検討する必要がありますが、piのような必須のSDカードブートを備えた組み込みLinuxシステム非常に複雑になり、高価ではないにしても、独自の方法で壊れやすくなります。より小さく、より高度に統合されたARM MCUをベースにしたボードがたくさんあります。これらは、アプリケーションの点でArduinoに非常に似ていますが、大幅に機能が向上しています。しかし、大量の処理またはメガバイトのメモリが必要な場合は、そうです。これらの複雑さは価値があり始めます。
  • 柔軟性が非常に高いため、ゼロも好みます。ストレージを追加したり、プロジェクトに埋め込んだりしながら、ほとんどすべてのことを実行できる十分な大きさのプロセッサを搭載できます。

回答

他のプラットフォームを調べることもできます。たとえば、Teensy 3.2はArduinoと互換性があり、2KBのEEPROMと64KBのRAMを備えています。

回答

幅広い質問をしました質問、いくつかの詳細を含めると便利です。メモリの量と、それが必要だと思う理由など。

私はかつて、2 KBのプログラムスペース、64バイトのRAM、1KIPSのプロセッサを指定しました。エンジニアはMIPSに尋ねました、私は毎秒数千を説明しました。彼は、「それほど遅くはない」と答えました。プロジェクトの最後に、巨大なUIが追加され、メモリがタイトになりました…それでも問題はありません。

したがって、もっと思慮深くなることを検討してください。使用されているリソースについて。

質問に答えるには:

1)Arduinoは、メモリをフェッチするための便利なバスを提供していません。したがって、プラグインする方法はありません。より多くのメモリを取得するためのチップ。

2)ArduinoにはSPIがあるため、SDカードにアクセスできます。SDカード上のコードはすべて実行可能メモリにロードする必要があります。これは複雑で、初心者向けではありません。 …

3)提案されているように、コードを強化します。これはおそらく学ぶのに良い方法です。

3)より大きなArduinoに移動します。

異なるArduinoプロセッサがあります。ACRラインにあるものとARMラインにあるものがあります。同じファミリの別のデバイスに移動することは比較的控えめな変更であり、最大368バイトのプログラムフラッシュを提供できます。ただし、これらはArduinoボードではありません。正確に。

Arduino ARMベースのデバイスは非常に異なり、さまざまなライブラリを使用します。

Unoと非常によく似ており、フットプリントも似ているArduino Mega 2560を確認してください。コードは比較的簡単に移植でき、安価です。

より大きなデバイスがあります。 AVRファミリに含まれます。

注:AVR32は別のプロセッサであり、周辺機器も十分に異なるため、別のデバイスです。

非常に大規模なプログラムに参加したい場合(ギガバイトのメモリ)Beagleboardをチェックしてください。完全なLinuxと仮想メモリ(上記の#2を参照)があり、より強力なI / Oメカニズムがあります。

コメント

  • おそらくいくつか修正しますウェン、3などのタイプミスと異なる
  • つまり、これらのタイプミスを修正すると、誰かがあなたの答えに投票する可能性があります…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です