simavr ist ein AVR-Simulator für Linux oder jede Plattform, die avr-gcc verwendet. Es verwendet die eigene Registerdefinition von avr-gcc, um die Erstellung neuer Ziele für unterstützte AVR-Geräte zu vereinfachen. Der Kern wurde so konzipiert, dass er klein und kompakt ist und gehackt werden kann, sodass ein schnelles Prototyping eines AVR-Projekts möglich ist. Der AVR-Kern ist jetzt stabil für die Verwendung mit Teilen mit <= 128 KB Flash und mit vorläufiger Unterstützung für die größeren Teile. Der Simulator lädt ELF-Dateien direkt und es gibt sogar eine Möglichkeit, Simulationsparameter mithilfe eines .elf-Abschnitts direkt im emulierten Code anzugeben. Sie können auch mehrteilige HEX-Dateien laden.
- _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.
Unter OSX empfehlen wir die Verwendung von Homebrew:
brew tap osx-cross/avr
brew install --HEAD simavr
Unter Ubuntu ist SimAVR in der Bionic-Paketquelle verfügbar:
apt-get install simavr
(Beachten Sie, dass der Befehl unter dem Namen simavr
und nicht unter run_avr
verfügbar gemacht wird.)
Andernfalls reicht make
aus, um einfach mit der Verwendung von bin/simavr zu beginnen. Um den simavr -Befehl systemweit zu installieren, make install RELEASE=1
.
Patches sind jederzeit willkommen! Bitte reichen Sie Ihre Änderungen über Github-Pull-Requests ein.
simavr kann die meisten seiner Pins, Firmware-Variablen, Interrupts und einige andere Dinge als Signale ausgeben, die in eine Datei geschrieben werden, die mit gtkwave zur weiteren, präzisen Analyse aufgezeichnet werden kann. Eine Firmware kann Anweisungen enthalten, damit simavr weiß, was verfolgt werden soll, und die Datei wird automatisch generiert. Beispiel:
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, },
};
Weist simavr an, bei jeder Änderung des UDR0-Registers und bei jedem Auslösen des Interrupts (in UCSR0A) einen Trace zu generieren. Das MMCU- Tag teilt gcc mit, dass es kompiliert werden muss, aber es wird nicht in Ihrem Programm verknüpft, sodass es buchstäblich null Bytes benötigt. Dies ist ein Codeabschnitt, der für simavr privat ist, er ist kostenlos! Ein Programm, das mit diesen Anweisungen ausgeführt wird und auf den seriellen Port schreibt, generiert eine Datei, die Folgendes anzeigt:
$ ./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
Und wenn die Datei in gtkwave geladen wird, sehen Sie:
Sie erhalten eine sehr genaue zeitliche Aufschlüsselung aller Änderungen, die Sie dem Trace hinzufügen, bis hin zum AVR-Zyklus.
simavr ist wirklich als Zentrum für die Emulation Ihrer eigenen AVR-Projekte gedacht, nicht nur als Debugger, sondern auch für die Emulation der Peripheriegeräte, die Sie in Ihrer Firmware verwenden werden, sodass Sie offline testen und entwickeln und es ab und zu auf der Hardware ausprobieren können .
Sie können simavr auch dazu verwenden, Testeinheiten an Ihrer Liefer-Firmware durchzuführen, um diese zu validieren, bevor Sie eine neue Version ausliefern, um Rückschritte oder Fehler zu verhindern.
simavr verfügt über einige „vollständige Projekte“, die dies demonstrieren. Die meisten davon wurden irgendwann mit echter Hardware erstellt, und die Firmware-Binärdatei ist genau die, die auf der Hardware ausgeführt wurde. Der Schlüssel liegt hier darin, die Teile oder Peripheriegeräte zu emulieren, die an den AVR angeschlossen sind. Natürlich müssen Sie nicht die gesamte Hardware emulieren, sondern nur den richtigen Reiz erzeugen, damit der AVR getäuscht wird.
Dieses Beispielboard verbindet einen Atmega48 mit einem emulierten HD44780-LCD und zeigt einen laufenden Zähler im „LCD“ an. Alles ist emuliert, die Firmware läuft auf echter Hardware genauso.
Und dies ist eine GTKwave-Spur dessen, was die Firmware tut. Sie können in gtkwave hineinzoomen, messen usw., die anzuzeigenden Spuren auswählen usw.
Es gibt noch viele weitere Beispiele!