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


von pacer (Gast)


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

von Falk B. (falk)


Lesenswert?

Unmöglich.

von Peter D. (peda)


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

von pacer (Gast)


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?!

von Peter D. (peda)


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

von pacer (Gast)


Angehängte Dateien:

Lesenswert?

hier mal ein Bild mit dem selben Fehler nur nach tst...

von 6632 (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von pacer (Gast)


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.

von AVRFan (Gast)


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.

von AVRFan (Gast)


Lesenswert?

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

Zusatz: Die Aussage bezieht sich auf einen realen AVR.

von pacer (Gast)


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.

von Falk B. (falk)


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

von 6633 (Gast)


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

von pacer (Gast)


Lesenswert?

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

von AVRFan (Gast)


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".

von AVRFan (Gast)


Lesenswert?

>zweite Problem

Worum gehts?

von 6633 (Gast)


Lesenswert?

Wenn man nur das Z auf Null haben will geht das einfacher :
BCLR Z

von pacer (Gast)


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.

von AVRFan (Gast)


Lesenswert?

>Wenn man nur das Z auf Null haben will geht das einfacher :
>BCLR Z

CLZ

;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.