AVR-Studio Bugs: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
(Reihenfolge korrigiert)
Zeile 46: Zeile 46:
'''ATmega88'''
'''ATmega88'''
* schreiben nach UCSR0C (Adresse 0xC2h) überschreibt ebenfalls UBRR0H (Adresse 0xC5h)
* schreiben nach UCSR0C (Adresse 0xC2h) überschreibt ebenfalls UBRR0H (Adresse 0xC5h)
==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.09 (Build 338)==
==AVR-Studio 4.09 (Build 338)==
Zeile 57: Zeile 63:
* 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.
* 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.
* 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)==
==AVR-Studio 4.08 (Build 310)==

Version vom 27. April 2006, 10:28 Uhr

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

Damit Fehler in einer der kommenden Versionen (hoffentlich) behoben werden, sollten Fehlerberichte ("Bug-Reports") zur jeweils aktuellen Version mit genauer Beschreibung zum Reproduzieren des Fehlers (evtl. mit Codebeispiel) auch an avr@atmel.com gesendet werden (in Englisch). Das AVR-Studio-Forum bei avrfreaks wird ebenfalls von den AVR-Studio-Entwicklern "beobachtet". Gelegentlich finden sich inoffizielle Updates für AVR-Studio auf www.atmel.no/beta_ware.

AVR-Studio 4.12 RC1 (Build 450) 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:

Mode  Timer/CounterMode                Fehlerbeschreibung
      of Operation
0     Normal                           kein Fehler
1     PWM, Phase Correct, 8-bit        kein Fehler
2     PWM, Phase Correct, 9-bit        kein Fehler
3     PWM, Phase Correct, 10-bit       kein Fehler
4     CTC                              kein Fehler
5     Fast PWM, 8-bit                  arbeitet wie Mode 1
6     Fast PWM, 9-bit                  arbeitet wie Mode 2
7     Fast PWM, 10-bit                 arbeitet wie Mode 3
8     PWM, Phase and Frequency Correct ignoriert ICR1, arbeitet wie Mode 0
9     PWM, Phase and Frequency Correct ignoriert OCR1A, arbeitet wie Mode 1
10    PWM, Phase Correct               ignoriert ICR1, arbeitet wie Mode 2
11    PWM, Phase Correct               ignoriert OCR1A, arbeitet wie Mode 3
12    CTC                              ignoriert ICR1, arbeitet wie Mode 4(OCR1A)
13    (Reserved)
14    Fast PWM                         ignoriert OCR1A, arbeitet wie Mode 2
15    Fast PWM                         ignoriert ICR1, arbeitet wie Mode 3


Ursache: WGM13 wird total ignoriert und WGM12 nur für die Aktivierung von Mode 4 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.

weitere Fehler:

  • 1. Wenn OCR1B = 0 ist, wird das OCF1B-Flag bei TCNT = 0 nicht gesetzt und der Interrupt somit nicht ausgeführt.
  • 2. Wenn OCR1A = OCR1B ist, wird manchmal der OCR1B-Interrupt vor dem OCR1A-Interrupt ausgeführt, obwohl OCR1A die höhere Priorität hat.

ATmega88

  • schreiben nach UCSR0C (Adresse 0xC2h) überschreibt ebenfalls UBRR0H (Adresse 0xC5h)

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.09 (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.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.