AVR-Studio Bugs

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

Das kostenlose AVR Studio von Atmel enthält in der Simulation einige Fehler. Falls euch zusätzliche Fehler bekannt sind, bitte hier hinzufügen.

NICHT==AVR-Studio 4.11 SP3 (Build 410) und älter==

AVRSimIOTimert16pwm1.DLL File Version: 1.0.0.10 Product Version: 1.0.0.2

Diese DLL wird zur Simulation der 16-Bit Timer in ATmega8/88/48 verwendet (wahrscheinlich in allen CPU's mit zwei Output Compare Units).

Fehler: Alle FastPWM-Modi zählen nach erreichen von TOP rückwärts, anstatt den Timer auf 0 zu setzen.

Ursache: WGM13 wird total ignoriert und WGM12 nur für die Unterscheidung der beiden CTC-Modi verwendet. Das ist kein einfacher Programmierfehler, der Rest ist unbegreiflicherweise garnicht implementiert!

Der Fehler tritt im ATmega128 nicht auf, der einen erweiterten 16-Bit Timer hat und deswegen die AVRSimIOTimert16pwm2.DLL verwendet.

AVR-Studio 4.9 (Build 338)

AVR Studio :4, 9,0, 338 Platform :JTAG ICE Build :1, 0, 0, 32 Part :ATmega16 Build :91

  • 1. Beim Debuggen mit JTAG, wenn globele Struktur ohne typedef deklariert ist und Deklaration im Header-datei steht, zeigt AVR-Studio im Watch-fenster nicht.
  • 2. Variable foo mit __attribute__ ((section (".eeprom"))) wird mit SRAM-location angezeigt, obwohl richtig behandelt.

AVR-Studio 4.10 (Build 356)

ATMega8

  • Simulator (AD Wandler). Beim manuellen setzen des ADIF Bits in ADCSR, wird nicht die dazugehörige Interrupt Routine angesprungen.

AVR-Studio 4.08 (Build 310)

ATtiny12

  • Int0 (Interrupt 0) wird durch PinB.2 (falsch) und nicht durch PinB.1 (richtig) ausgelöst. (In Version 4.09 bereinigt)

ATtiny15

  • OCF1A-Flag in TIFR wird beim Ausführen des Interrupts nicht automatisch zurückgesetzt. Das führt dazu dass die Interruptroutine sofort nach Beendigung wieder angesprungen wird obwohl inzwischen kein neuer Interrupt erfolgte. Abhilfe: Zurücksetzen des Flags per Programm in der Interrupt-Routine:
ldi temp, 0x40
out TIFR, temp
  • PINB.1 zeigt Signalwechsel obwohl laut DDRB.1 als Eingang programmiert. Festgestellt bei Verwendung der "output compare"-Funktion von Timer/Counter1.


AT902313 (und wahrscheinlich auch andere Devices)

Die Simulation des EEPROM-Beschreibens funktioniert nicht. Der Code scheint zwar fehlerfrei zu laufen, doch die Daten im EEPROM verändern sich nach dem Schreibbefehl einfach nicht.

Simulator (getestet mit AT90S8535)

Wird grade im Einzelschritt Modus (F11) ein C Code mit einer if Verzweigung simuliert und in diesem Moment die Variable, die für die if Verzweigung entscheident ist, von Hand geändert und dann der nächste Schritt simuliert, stürtzt das AVR Studio mit der Meldung "Diese Anwendung wird aufgrund eines ungültigen Vorgangs geschlossen" ab.

Beispiel: if (dispmode == 2) {

Der gelbe Pfeil zeigt auf die Zeile; dispmode (vom Typ uint8_t) ist Null; dispmode wird zur "Watch 1" Liste hinzugefügt; dort wird die Variable von Hand in 2 geändert; dann wird der nächste Schritt (F11) simuliert -> Absturz des Programms


Timer des ATMEGAS128 wird nicht richtig simuliert

Es ist leider schon eine Ewigkeit aus, deshalb kann ich keine genaueren Angaben machen. Es gibt einen Modus, wo der Timer hinaufzählt. Hat er den höchsten Wert erreicht zählt er wieder hinunter. Im AVR-Studio änderte der Timer nie seine Zählrichtung.