www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik (AVR) nach CPI ist Z unbestimmt


Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich wollte mal fragen woher das kommt, dass nach einem Vergleich mittles 
cpi das z-Flag unbestimmt ist. Eigentlich sollte das doch nicht möglich 
sein?!

Gruß, JK

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unmöglich.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pacer wrote:
> ich wollte mal fragen woher das kommt, dass nach einem Vergleich mittles
> cpi das z-Flag unbestimmt ist.

Ne, CPI funktioniert natürlich korrekt und auch ein BREQ danach.


Peter

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist die Fehlermeldung die VMLAB bringt.
jezt habe ich das register vorher über ldi mit einer Null beschrieben, 
und siehe da, der Fehler taucht an dieser Stelle nicht mehr auf (leider 
dafür an einer anderen Stelle mit dem Befehl tst)
Selbst wenn ich das register nicht beschreibe, sollte ja eine Null drin 
stehen, komisch?!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pacer wrote:
> ist die Fehlermeldung die VMLAB bringt.

Mag ja sein, das hat aber nichts damit zu tun, was der AVR im wirklichen 
Leben macht.


Peter

Autor: pacer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier mal ein Bild mit dem selben Fehler nur nach tst...

Autor: 6632 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. das ist was anderes. Der Compiler kann nicht nachvollziehen, dass im 
Z was sinnvolles drin sein soll.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
6632 wrote:

> Ja. das ist was anderes. Der Compiler kann nicht nachvollziehen, dass im
> Z was sinnvolles drin sein soll.

Wenn du keine Ahnung davon hast, was da gezeigt wird, dann rede bitte
nicht drüber.

Kann eigentlich nur ein VMlab-Bug sein.  Schade nur, das Tool wird
nicht mehr gepflegt, da ihm der gewünschte kommerzielle Erfolg
versagt geblieben ist.  Ich kann's nur immer wieder schreiben: wer
daran interessiert ist, sollte einfach Enrique fragen, ob er es entweder
opensource machen möchte oder aber wenigstens jemandem den Sourcecode
unter NDA zur weiteren Pflege übergeben würde.

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab den Fehler gefunden, nachdem ich mich ein bisschen mit der 
Speicheranzeige befasst habe, ist mir aufgefallen, dass der X-Pointer 
ins Leere zeigt, ich muß ihn also vorher wieder auf das erste Zeichen 
zeigen lassen. Bin also noch fleißig am Knobeln.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>jezt habe ich das register vorher über ldi mit einer Null beschrieben,

Bingo, "ldi" ändert das Z-Flag nämlich gerade NICHT!

clr temp    --> S = 0, N = 0, V = 0, Z = 1.

ldi temp, 0 --> alle Flags bleiben unverändert.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bingo, "ldi" ändert das Z-Flag nämlich gerade NICHT!

Zusatz: Die Aussage bezieht sich auf einen realen AVR.

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke im ersten Fall ist das richtig, was Peter erwähnt hat.
Im realen AVR, gibt es keinen unbestimmten Zustand, wenn es nicht 1 ist, 
ist es eben 0. Und 0 ist auch ein Ergebnis, oder?

Vielleicht war das undeutlich ausgedrückt, aber ich habe in ein 
beliebieges  Regster eine 0 geladen und dann einen Vergleich (cpi 
temp,0) gestartet. Damit wird das Z-Flag auf 0 gesetzt. Ich habe es 
natürlich nicht direkt auf Null gesetzt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ pacer (Gast)

>ich denke im ersten Fall ist das richtig, was Peter erwähnt hat.
>Im realen AVR, gibt es keinen unbestimmten Zustand,

Ja. Aber es gibt viele befehle, welche die Flags nicht verändern.

> wenn es nicht 1 ist,
>ist es eben 0. Und 0 ist auch ein Ergebnis, oder?

Sicher.

MFG
Falk

Autor: 6633 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Das Z ist nur Null wenn der Vergleich auch mit diesem Register 
geschah. Irgendein Register laden und mit "temp" vergleichen ist 
unbestimmt.

ldi temp,0
cpi temp,0

Z -> 0

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau, das habe ich gemacht, passt ja jetzt. Muss ich nur noch das 
zweite Problem klären...

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Im realen AVR, gibt es keinen unbestimmten Zustand, wenn es nicht 1 ist,
>ist es eben 0. Und 0 ist auch ein Ergebnis, oder?

Unbestimmte Flagzustände gibt es selbstverständlich nicht. Der 
Unterschied besteht nicht in "Flagzustand bestimmt - Flagzustand 
unbestimmt", sondern "Befehl beeinflusst Flags - Befehl lässt Flags 
unangetastet".

>aber ich habe in ein beliebieges  Regster eine 0 geladen und dann einen
>Vergleich (cpi temp,0) gestartet. Damit wird das Z-Flag auf 0 gesetzt.

So ist es. Äquivalent dazu wäre ein "tst temp".

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>zweite Problem

Worum gehts?

Autor: 6633 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man nur das Z auf Null haben will geht das einfacher :
BCLR Z

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tipp.
Wegen meinem zweiten Problem muss ich erst mal ne Zwischenfrage stellen. 
Habe ich aber in einem neuen Post gemacht, weils thematisch hier nicht 
reinpasst.
Ist aber das Problem mit tst, so wie weiter oben beschrieben.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn man nur das Z auf Null haben will geht das einfacher :
>BCLR Z

CLZ

;-)

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.