Osscon schrieb:> Hallo,> beim folgendem Code verstehe ich, warum er genau 6 Cycle für einen> Durchlauf benötigt:>
1
> Loop
2
> btg LATB,0,0
3
> btfsc RegisterWasNullIst,0,1
4
> goto $+2
5
> goto Loop
6
>
> Jetzt verstehe ich aber nicht warum folgender Code 7 Cycle und nicht 6> benötigt:>
1
> Loop
2
> btg LATB,0,0
3
> btfss RegisterWasNullIst,0,1
4
> goto $+2
5
> goto Loop
6
>
Ich seh jetzt da keinen Unterschied, kannst du nochmal...
<edit> oh SORRY ;-) Da ist ja ein sc/ss
Wie war das nochmal mit dem +1+2 bei PIC18/PIC16 und warum überhaupt
goto und nicht bra?
Da ist nur ein Beispiel. Ich bin auf dieses Problem in einem anderem
Programm gestoßen.
Beitrag "Re: PIC18 Woher kommt der 7. "Cycle""
Wie genau meinst du das?
Ich habe das auch in der Doc gelesen wusste aber nicht so recht damit
anzufangen.
Kannst du mir das genauer an dem Beispiel erklären?
Herbert schrieb:> Bedingter Sprung (BTFSS/...) 1 Cycle oder 3 je nachdem.
3 weil die nächste ist 2 Cycle...
Osscon schrieb:> Wie genau meinst du das?
Was genau meinst du?
Ah ok, es kann ja nur ein Programmwort übersprungen werden.
Dann stellt wird aber festgestellt, dass es sich bei denm dann folgenden
Wort um den zweiten Teil eines 2Wort Befehls handelt. Also muss das auch
übersprungen, bzw. nicht beachtet werden...
Vielleicht hast du ja auch schon ein Problem damit, warum die Ausführung
ein oder zwei Zyclen dauern kann.
Das kommt daher, dass wenn nicht gesprungen wird, der Programmzeiger
einfach nur incrementiert werden muss, was sozusagen nebenher geschehen
kann.
Bei einem Sprung muss der Programmzeiger gezielt verändert werden, was
den zweiten Zyklus erforderlich macht. Wenn der Zeiger dann auf das
zweite Word eines 2Word Befehls zeigt, dann wird das einfach ignoriert,
aber der Zyklus ist futsch...
<edit> was schreib ich heut nur f+r ein...
Hallo,
auch meine Meinung, relative Sprünge nur als "computed jump" für
spezielle Tabellenauswertungen, vor dem Springen den Registerinhalt auf
zulässige Sprungweite prüfen. Wenn der Offset nur einen Teil des
counters verbiegt Vorsicht wenn die Tabelle über blockgrnzen abegelgt
ist.
Gruß
Merke, jede Variable die von "igendwo" kommt kann gelogen sein.
NB: Beim GOTO war wohl ein Optimierer am Werk. GOTO ist doch ein
2-Word-Befehl, während BRA ein 1-Wort-Befehl ist. Nach 002E GOTO ...
sollte der nächste Befehl bei 0032 sein.
Schon von daher sollte nach BTFSS u.ä. kein 2.Wort-Befehl stehen,
sondern nur ein BRA o.ä.
Anon E. schrieb:> NB: Beim GOTO war wohl ein Optimierer am Werk. GOTO ist doch ein> 2-Word-Befehl, während BRA ein 1-Wort-Befehl ist. Nach 002E GOTO ...> sollte der nächste Befehl bei 0032 sein.
Ist es doch laut Program Memory auch. (Nur sollte man dann eben +4
springen)
> Schon von daher sollte nach BTFSS u.ä. kein 2.Wort-Befehl stehen,> sondern nur ein BRA o.ä.
Warum? Wo soll da ein Problem sein?. Das zweite Word wird doch dann als
Nop interpretiert...
(((Dass bra hier besser wäre hatten wir ja schon)))
Volker S. schrieb:> und warum überhaupt goto und nicht bra?