simavr は、Linux または avr-gcc を使用するプラットフォーム用の AVR シミュレータです。 avr-gcc 独自のレジスタ定義を使用して、サポートされている AVR デバイスの新しいターゲットの作成を簡素化します。コアは小さくコンパクトに作られており、ハッキング可能なため、AVR プロジェクトの迅速なプロトタイピングが可能です。 AVR コアは、128KB 以下のフラッシュを搭載したパーツでの使用が安定しており、より大きなパーツの予備サポートも提供されています。シミュレータは ELF ファイルを直接ロードします。また、.elf セクションを使用してエミュレートされたコード内でシミュレーション パラメータを直接指定する方法もあります。マルチパート HEX ファイルをロードすることもできます。
- _simavr_ is provided **AS IS**. If you think you should report "security vulnerabilities"
- and waste everyones time with them, you are either a grifter OR an idiot, or both. And
- anyone checking the CV you brag about it will see this paragraph, first.
OSX では、homebrew を使用することをお勧めします。
brew tap osx-cross/avr
brew install --HEAD simavr
Ubuntu では、SimAVR は Bionic パッケージ ソースで利用できます。
apt-get install simavr
(コマンドはrun_avr
ではなくsimavr
という名前で使用できることに注意してください。)
それ以外の場合は、 bin/simavrの使用を開始するだけでmake
で十分です。 simavrコマンドをシステム全体にインストールするには、 make install RELEASE=1
。
パッチはいつでも大歓迎です! Github プル リクエスト経由で変更を送信してください。
simavr は、ほとんどのピン、ファームウェア変数、割り込み、およびその他のいくつかのものを信号として出力し、gtkwave を使用してプロットできるファイルにダンプして、さらに正確な分析を行うことができます。ファームウェアには、 simavr がトレース対象を認識するための命令を含めることができ、ファイルは自動的に生成されます。例:
const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = {
{ AVR_MCU_VCD_SYMBOL("UDR0"), .what = (void*)&UDR0, },
{ AVR_MCU_VCD_SYMBOL("UDRE0"), .mask = (1 << UDRE0), .what = (void*)&UCSR0A, },
};
UDR0 レジスタが変更されるたび、および (UCSR0A で) 割り込みが発生するたびにトレースを生成するようにsimavr に指示します。 MMCUタグは、コンパイルが必要であることを gcc に伝えますが、プログラム内ではリンクされないため、文字通りゼロバイトを必要とします。これはsimavr専用のコード セクションであり、無料です。これらの命令でプログラムを実行し、シリアル ポートに書き込むと、次の内容を表示するファイルが生成されます。
$ ./simavr/run_avr tests/atmega88_example.axf
AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
Loaded 1780 .text
Loaded 114 .data
Loaded 4 .eeprom
Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
atmega88 init
avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
Creating VCD trace file 'gtkwave_trace.vcd'
Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
Read from eeprom 0xcafef00d -- should be 0xcafef00d..
simavr: sleeping with interrupts off, quitting gracefully
ファイルが gtkwave にロードされると、次のように表示されます。
AVR サイクルに至るまで、トレースに追加した変更の非常に正確なタイミングの内訳が得られます。
simavrは実際には、独自の AVR プロジェクトをエミュレートするための中心となるように作られており、単なるデバッガではなく、ファームウェアで使用する周辺機器のエミュレーションも行うため、オフラインでテストおよび開発し、場合によってはハードウェア上で試すことができます。 。
また、 simavr を使用して、出荷中のファームウェアでテストユニットを実行し、新しいバージョンを出荷する前に検証して、回帰や間違いを防ぐこともできます。
simavrには、これを実証する「完全なプロジェクト」がいくつかあります。それらのほとんどは、ある時点で実際のハードウェアを使用して作成されており、ファームウェア バイナリはハードウェア上で実行されたものとまったく同じです。ここで重要なのは、AVR に接続されている部品または周辺機器をエミュレートすることです。もちろん、ハードウェア全体をエミュレートする必要はありません。AVR がだまされるように適切な刺激を生成するだけで十分です。
このサンプル ボードは、Atmega48 をエミュレートされた HD44780 LCD に接続し、「lcd」に実行中のカウンタを表示します。すべてがエミュレートされ、ファームウェアは実際のハードウェア上でまったく同じように実行されます。
これは、ファームウェアが何を行っているかを示す gtkwave トレースです。 gtkwave ではズームイン、測定などを行ったり、表示するトレースを選択したりすることができます。
他にも多数のサンプルをご用意しております!