AVR-Simulation

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

SimulAVR

SimulAVR ist ein Simulator, der einige Prozessoren der AVR-Familie auf einem PC-Hostsystem (Windows, Linux, Mac OS X) simulieren kann. Dieser Simulator ist auch im WinAVR-Paket enthalten (/WinAVR/bin/simulavr.exe).

Eine Verwendung von SimulAVR ist das sog. Signal Tracing, d.h. das aufzeichnen von Änderungen der diversen Register (z.B. der Pins eines I/O-Ports) in eine VCD-Datei. Auch wenn die Laufzeit des Simulators oft langsamer als die der Hardware ist, entsprechen diese Aufzeichnungen auf den CPU-Takt genau dem, was auf der Hardware passieren würde. Wie diese Aufzeichnungen gemacht werden ist bei SimulAVR selbst kaum dokumentiert, doch bei RepRap gibt es eine kleine SimulAVR Anleitung, die eine gute Passage dazu enthält.

Die Hauptanwendung von SimulAVR dürfte das Debuggen sein. Dafür wird SimulAVR über ein dazu passendes Frontend bedient. GDB und Insight sind zwei, ebenfalls in WinAVR enthaltene, Programme, die ein solches Frontend bilden.

Wer "textorientiertes" Debugging mag, oder beispielsweise emacs als Frontend verwenden möchte, der nutzt den GDB, den GNU Debugger. Er ist im WinAVR-Paket enthalten (/WinAVR/bin/avr-gdb.exe). Wer gleich eine grafische Benutzeroberfläche (GUI) verwenden möchte, nutzt Insight (welches intern ebenfalls den GDB verwendet).

Beide Debugger, also GDB oder Insight, benötigen ein Backend. Entweder handelt es sich dabei um einen ICE/JTAG-Debugger wie z. B. AVaRICE als Interface zu einem realen AVR-Mikrocontroller oder um einen Simulator.

Starten von SimulAVR

SimulAVR-Display.png

Um SimulAVR mit default-Parametern zu starten, reicht es aus, folgende Zeile in einer Shell/Eingabeaufforderung einzugeben:

$ simulavr -g -d <AVR-Prozessortyp>

SimulAVR startet dann mit den defaultparametern und stellt einen GDBServer-Prozess auf dem lokalen oder entfernten Host auf Port 1212 zur Verfügung. Das Backend der Simulation ist nun Einsatzbereit.

Eine weitere Möglichkeit ist, SimulAVR mit Display zu starten. Dann werden während der Ausführung die Werte der Register und dem RAM angezeigt (siehe Bild).

$ simulavr -g -P simulavr-disp -d <AVR-Prozessortyp>

Eine Übersicht der unterstützten AVR-Prozessoren und der SimulAVR spezifischen Parameter bekommt man durch folgende Zeile:

$ simulavr --help

Starten des GDB

Um das (vorläufige) Frontend GDB zu starten, reicht folgende Zeile:

$ avr-gdb

Der GDB meldet sich mit folgendem Bildschirm:

Current directory is c:/WinAVR/testprj4/
GNU gdb 6.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-cygwin --target=avr".
(gdb) 

(gdb) ist der Prompt.


Soll während dem Debuggen der Quellcode angezeigt werden, der zur Zeit ausgeführt wird, kann GDB wie folgt gestartet werden.

$ avr-gdb -tui

Beim (gdb) prompt dann das Layout auf Assembler umschalten.,

(gdb) layout asm

Simulieren/Debuggen

Im ersten Schritt muss dem GDB die gewünschte Datei (vorher mittels entsprechendem Makefile erzeugt) bekannt gemacht werden. Es ist darauf zu achten, dass das Programm mit Debugsymbolen kompiliert wurde.

(gdb) file main.elf 
Reading symbols from main.elf...done.

Als nächstes muss dem GDB mitgeteilt werden, welches Ziel (target) er als Backend verwenden soll:

(gdb) target remote localhost:1212

oder kürzer:

(gdb) targ rem :1212
Remote debugging using :1212
0x00000000 in __vectors ()

Jetzt muss das Programm in den Simulator geladen werden:

(gdb) load
Loading section .data, size 0x32 lma 0x1bc
Loading section .text, size 0x1bc lma 0x0
Start address 0x0, load size 494
Transfer rate: 3952 bits in <1 sec, 30 bytes/write.

Da diese 3 Schritte üblicherweise, bei jedem Start einer Simulationssitzung ausgeführt werden müssen, können sie zeilenweise in eine Textdatei (Vorschlag: gdb.conf) geschrieben werden, diese Datei wird dem gdb dann mit dem Parameter "-x" (eXecute) mitgegeben:

avr-gdb -x gdb.conf

Alternativ zu dem remote-debugging kann auch der avr-gdb-interne Simulator benutzt werden. Dieser wird mit

target sim

gestartet.


Damit der Simulator nicht das gesamte Programm abarbeitet, sollte man breakpoints setzen. Den Ersten am besten bei main:

(gdb) b main
Breakpoint 1 at 0xd2: file main.c, line 16.

Jetzt kann man das Programm im Simulator mit continue starten:

(gdb) c
Continuing.

Bei Erreichen des zuvor gesetzten breakpoints stoppt GDB und meldet:

Breakpoint 1, main () at main.c:16
(gdb)

Eine Liste der verfügbaren debug-befehle des GDB findet sich durch die Eingabe von help.

Data Display Debugger

Ddd c.png

Eine sehr komfortable Benutzeroberfläche zum gdb erhält man mit dem Programm "ddd" (Data Display Debugger), https://de.wikipedia.org/wiki/Data_Display_Debugger

Diesem gibt man beim Aufruf mit, welcher gdb, mit welcher Verbindung zum Ziel genutzt werden soll. Falls das Startscript, wie oben genutzt werden soll z.B.:

ddd --debugger "avr-gdb -x gdb.conf"

Wenn das Projekt mit den entsprechenden Debug-Informationen übersetzt wurde, dann zeigt der DDD die Zeile im Quelltext (auch bei Assemblerteilen), Variableninhalte lassen sich inspizieren, indem der Mauszeiger drauf positioniert wird.

Ddd asm.png

ToDo

[TODO] Einige häufige GDB-Commands als Beispiel einfügen.

VMLab

VMLab ist eine komplette Freeware-IDE mit Debugger und Simulator für MS-Windows. VMLab arbeitet mit WinAVR zusammen und kann AVR-Peripheriehardware simulieren. Leider hat der Autor von VMLab die Entwicklung im Jahr 2006 eingestellt, da dem Projekt nicht der gewünschte kommerzielle Erfolg vergönnt war. Die aktuelle Version ist 3.15 von Oktober 2009.

Siehe auch:

AVR Studio

Simulator-Ansicht in AVR Studio

AVR Studio von Atmel enthält neben dem Übersetzungsteil, dem Debuggingteil auch einen Simulatorteil. Eine Übersicht über alle drei Programmteile gibt der Powerpoint-Vortrag AVR Studio: The comprehensive tutorial (MS PowerPoint 2007) von Jeremy Gummeson und Brendan Kemp.

Wenn nur ein Breakpoint gesetzt ist, kann mit F5 das Programm einen Abarbeitungszyklus machen. Die Bearbeitung bleibt dann wieder beim Breakpoint stehen. Mit der Stoppuhr kann dann die Zeit für den abgearbeiteten Programmteil gemessen werden. Mit der rechten Mouse-Taste kann die Stoppuhr zurückgesetzt werden.

Ausführliche Anleitung zum Ablauf einer Simulation: Tutorial der Purdue University (engl., PDF) (link tot!)

Externe Signale können mit den Tools HAPSIM oder über eine Stimulidatei in den Simulator eingespeist werden.

Zu beachten ist, dass sich mit der Einführung des AVR Simulator 2, welcher Vorteile wie Unterstützung von TWI bietet, das Datenformat für extern zugeführte Stimuli-Files geändert hat. Eine kleine Einführung inkl. Beispiel bietet die im AVR-Studio enthaltene Hilfe:

AVR Studio Help → AVR Tools User Guide → Simulator → Simulator2 Stimuli

HAPSIM

HAPSIM (Helmis AVR Periphery Simulator) ist ein Tool zur graphischen Simulation von Tasten, LED, LCD und Terminalfunktionen in AVR Studio. (deutsch/engl., Windows, Freeware). Hinweise zur Installation von Hapsim nach einem AVR Studio Update stehen im Forum. HAPSIM kann nur mit AVRStudio 4.x verwendet werden, für den Fall, dass die Domain selbst nicht funktioniert kann folgender Direktlink verwendet werden.

Stimuli

Über eine sog. Stimuli-Datei lassen sich von ausserhalb Signale dem AVR Studio zuführen. Informationen zum Aufbau einer Stimulidatei finden sich in obigem "AVR Studio: The comprehensive tutorial" und bei Atmel (What is the format of the AVR Studio simulator stimuli files?). Der Stimuli Generator for AVR Studio ist eine Freeware für die Erzeugung von Stimulidateien und deren grafischen Darstellung. Für dieses Programm ist .NET 1.1 oder 2.0 erforderlich. Ein Python-Script zum Umwandeln der Stimuli-Log Datei in eine vcd-Datei, welche z.B. in gtkwave betrachtet werden kann, ist hier verfügbar.

LogAnalyser

LogAnalyser v1.00 (c) 2008 Jon Escombe is a graphical "logic analyser" style display of Atmel AVR Studio simulator log files. The project is built using the (excellent) zedGraph charting class library, and the source code is made available under GPL license. Requires Windows XP and .NET framework 2.0 to run.

TCPSimDBG

TCPSimDBG ist ein Plugin für AVR-Studio um Remote Simulating/Debugging über TCP/IP durchzuführen. Ein TCP/IP-Terminal oder Serverprogramm kann sich mit dem Simulator/Debugger von AVR-Studio verbinden und Informationen aus dem Debugprozess abrufen und ändern. Damit lassen sich virtuelle Geräte (Devices) eingerichten. (Atmel SDK Lizenz, Windows XP, 2003, Vista .NET 3.5 erforderlich)

AVR Logic Analyzer

AVR Logic Analyzer von Coyne Technology Systems ist ein AVR Studio Plugin zur grafischen Anzeige der simulierten I/O-Ports. (kommerziell)

Avrora

Avrora, a research project of the UCLA Compilers Group, is a set of simulation and analysis tools for programs written for the AVR microcontroller produced by Atmel and the Mica2 sensor nodes. Avrora contains a flexible framework for simulating and analyzing assembly programs, providing a clean Java API and infrastructure for experimentation, profiling, and analysis.

Proteus VSM for Atmel AVR

Proteus VSM for Atmel AVR ist ein kommerzieller AVR Simulator.

In der Codesammlung gibt es dafür ein Virtuelles AVR Funk Pollin Simulationsmodell von Daniel Cagara.

CrossWorks for AVR

CrossWorks for AVR besitzt einen core simulator für AVRs. (Windows, Mac OS X, Linux, Solaris)

simavr

simavr Das ist ein AVR simulator von Michel "buserror" Pollet für Linux, oder andere Platformen welche avr-gcc unterstützen.

In simavr schon implementiert:

   eeprom
   watchdog
   IO ports
   Timers, 8 &16
   The UART, including tx & rx interrupts
   SPI, master/slave including the interrupt
   i2c Master & Slave
   External Interrupts, INT0 and so on.
   ADC
   Self-programming

Benutzung GDB (unter ubuntu getestet)

Öffnen 2 Terminals in simavr Ordner. Dann laden simavr in erstem Terminal mit einem embedded software (z.B. atmega1280_i2ctest):
$ ./simavr/run_avr examples/board_i2ctest/atmega1280_i2ctest.axf -g
Antwort:
Loaded 2478 .text at address 0x0
Loaded 56 .data
avr_gdb_init listening on port 1234

Im zweiten Terminal starten avr-gdb:
$ avr-gdb -tui

Jetzt müssen wir unsere software laden:
(gdb) file examples/board_i2ctest/atmega1280_i2ctest.axf
Antwort:
Reading symbols from examples/board_i2ctest/atmega1280_i2ctest.axf...done.
Danach eine Verbindung zwischen simavr und gdb aufbauen:
(gdb) target remote localhost:1234
Antwort:
Remote debugging using localhost:1234
0x00000000 in __vectors ()

Und wuala - wir sind schon bei Debugging:
1. Breakpoint setzen:
(gdb) b 140
Antwort:
Breakpoint 1 at 0x234: file atmega1280_i2ctest.c, line 140.
2. Programm starten:
(gdb) c
3. GDB haltet in der gewunschte Stelle
4. Zum nächsten Schrit gehen:
(gdb) s
5. Oder zum Nachbohren:
(gdb) n

Lizenz: GPL v3
Diskussion bei avrfreaks.net

avrtest

avrtest ist ein freier AVR Core-Simulator, der zur Ausführung der avr-gcc Testsuite verwendet wird. Über spezielle "magische SFRs" können bestimmte Aktionen ausgelöst werden wie z.B. definierter Programmabbruch oder die Ausgabe eines Zeichens auf Console, so daß ein Programm wie

#include <stdio.h>

int main()
{
    printf ("Hallo Welt!\n");

    return 0;
}

analoge Resultate bringt wie ein Programm, das nativ auf dem Rechner ausgeführt wird.

avrtest ist Open Source, einfach gehalten und auf Geschwindigkeit getrimmt. Die Eingabe von Stimuli ist nicht möglich, und interne Peripherie wird nicht unterstützt.

  • Lizenz: GPL v2 oder höher
  • Betriebssysteme: Windows, Linux, etc. Eigentlich keine Einschränkung, da es sich um ein Open-Source Projekt handelt.

Weblinks

BASCOM AVR

In BASCOM AVR ist ein Simulatorteil enthalten und damit ist auch die Simulation von Geräten (LCD, UART) möglich. BASCOM AVR wird von MCS Electronics verkauft (89€) und ist ein unter Windows laufender BASIC Compiler für Atmel AVR Mikrocontroller. Eine auf 4 KB Codegröße eingeschränkte Demoversion ist kostenlos erhältlich.

AVR Simulator IDE

AVR Simulator IDE from oshonsoft.com is a powerful application that supplies AVR developers with user-friendly graphical development environment for Windows with integrated simulator (emulator), Basic compiler, assembler, disassembler and debugger. (Kommerziell, Testversion verfügbar)

MacSim - AVR simulator for OS X

MacSim Alpha 4

Einschränkungen u.A.: "There are currently no timers, interrupts, or EEPROM. The processor is 'generic' and has fixed size data and instruction memories."