mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anweisung mit SFR wird nicht ausgeführt.


Autor: Markus B. (krabbe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

verwende zur Zeit folgende ISR aus der Bibliothek vom Peter Fleury:
SIGNAL(SIG_USART0_DATA){
    unsigned char tmptail;
    if (USART0_TxHead != USART0_TxTail) {
        tmptail = (USART0_TxTail + 1) & USART0_TX_BUFFER_MASK;
        USART0_TxTail = tmptail;
        UDR0 = USART0_TxBuf[tmptail];
    }else{       
        UCSR0B &= ~_BV(UDRIE0);
    }
}

Macht (sollte) folgendes:
Wenn die Indizes des Ringspeichers, in dem die über USART0 zu 
verschickenden Zeichen liegen, gleich sind, dann ist der Ringspeicher 
leer und im ELSE-Zweig wird sichergestellt, das die ISR nicht erneut 
aufgerufen wird.

Habe das beim Debuggen mit JTAGICE soweit verfolgt, das ich die Zeile 
"UCSR0B &= ~_BV(UDRIE0);" im ELSE-Zweig erreiche. Wenn ich nun mit "F11" 
die Zeile ausführen lasse, dann braucht es eine Weile und es erscheint 
der Disassembler .. naja - ab da ist dann keine nachvollziehbare 
Ausführung mehr möglich. Habe einige andere Schreibweisen probiert, hat 
aber leider nichts geholfen.

Gibt's irgendeinen Grund im Zusammenhang mit anderen Flags oder 
sonstwas, der erklären könnte warum ich "UDRIE0" nicht mit dieser 
Anweisung, an dieser Stelle oder nicht zu diesem Zeitpunkt löschen 
kann/darf?

Verwende zur Zeit:
WinAVR-20060421
AVR Studio 4.12SP4
ATmega162

Markus

Autor: Uwe Nagel (ulegan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das _BV() Macro ist veraltet und sollte nicht verwendet werden. Stolpert 
der Debugger darüber?
Versuch mal:
UCSR0B &= ~(1<<UDRIE0);
Ist aber eigentlich genau das, was das Macro macht.

Autor: Markus C. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis.

Hab's ausprobiert, hat leider nicht geholfen.

Er weder im Debugmodus noch "Freilaufend" über diese Zeile hinweg, das 
schließt wohl aus, das es am JTAG liegt - ?!?

Befürchte langsam, das ich gleich anfange AVR Studio 4.13 + WinAVR 
20070525 zu installieren .. hoffentlich hab' ich danach nicht noch mehr 
Fehler.

G

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus C. wrote:

> Habe das beim Debuggen mit JTAGICE soweit verfolgt, das ich die Zeile
> "UCSR0B &= ~_BV(UDRIE0);" im ELSE-Zweig erreiche.

Warum probierst Du nicht einfach mal "Real Life" aus, hast Du keine UART 
am PC ?
Dann weißt Du sofort, obs am JTAG liegt oder nicht.


> Wenn ich nun mit "F11"
> die Zeile ausführen lasse, dann braucht es eine Weile und es erscheint
> der Disassembler .. naja - ab da ist dann keine nachvollziehbare
> Ausführung mehr möglich.

Das ist mal ne Fehlerbeschreibung mit der jeder was anfangen kann.
Werd konkreter !


Peter

Autor: Markus B. (krabbe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Warum probierst Du nicht einfach mal "Real Life" aus, hast Du keine UART
> am PC ?
> Dann weißt Du sofort, obs am JTAG liegt oder nicht.

Hatte ich bereits gemacht, daher weiß ich auch, das ich von dort aus 
nicht wieder an die Stelle zurückkomme von wo aus der Aufruf kam.

Im ZIP-File sind zwei Screenshots von vor der Ausführung der Zeile 
"UCSR0B &= ~(1<<UDRIE0);".
Hab' das so dargestellt, das man die USART-Register erkennen und den 
Code sehen kann.
Der dritte Screenshot zeigt die Ausgaben, die ich erzeuge ... leider 
kommt der Debug-Print nicht, der nach dem Rücksprung vorgesehen ist.
Mit oder ohne JTAG macht keinen Unterschied.
Ob das JTAG nicht doch irgendeinen Einfluß hat, kann das deshalb nicht 
so genau beurteilen weil ich dessen Arbeitsweise nicht bis ins letzte 
Detail erforscht habe.

if(1){
    txStringUsart0("Ping X\r\n");    // Schreibt Zeigen in Warteschlange

    // hier erfolgt die Abarbeitung der
    // ISR aus deren ELSE-Zweig ich nicht
    // an die richtige Stelle im Programm
    // zuückkehre.

    return 1;
} else {
    return -2;
}

-> Den Zustand kurz vor der Ausführung von "UCSR0B &= ~(1<<UDRIE0);" ist 
am besten im Screenshot zu erkennen.



Nach dem Build steht folgendes im Memory Usage
program: 32.9% Full
data: 52.1% Full
eeprom: 37.5% Full

... sollte für den Stack genug Raum lassen.

Welche Info wäre sonst noch hilfreich?

Markus

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus C. wrote:
> Hatte ich bereits gemacht, daher weiß ich auch, das ich von dort aus
> nicht wieder an die Stelle zurückkomme von wo aus der Aufruf kam.


Was soll wohin zurückkehren ?
Wird denn was von der UART gesendet ?

Vielleicht solltest Du mal nen kompletten Code posten (als Anhang), 
damit man nicht mehr im Nebel stochern muß.

Zu JTAG kann ich nichts sagen, hab ich noch nie benutzt.


Peter

Autor: Markus B. (krabbe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab's

Upgrade:
-> AVR Studio 4.13
-> WinAVR 20070525

Compiler zeigte einige Warnigs bzgl. 'type qualifier', die von der 
vorhergenden Insatallation nicht beanstandet wurden.

-> Type Qualifier korrigiert (char bzw. unsigned char)
-> Build ohne Warnings
-> Compilat läuft

... Lessons learned ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.