Sida 1 av 1

Vart tog "goto $-1" vägen??

Postat: 3 juni 2008, 17:46:16
av SM7UCZ
Håller på och konverterar ett gammalt 16F873 program till 18F2220 processor. Har märkt att genvägen vid hopp t.ex "goto $-1" funkar dåligt. Finns det något liknande i 16 bit coden?

Postat: 3 juni 2008, 17:56:57
av bearing
Vad menar du med "funkar dåligt?"
Symbolen $ är ju PC:ns värde. Om det värdet blir fel så är det antagligen fel i assemblern. Fast det verkar inte troligt. Visa oss koden som funkar dåligt.

Postat: 3 juni 2008, 18:09:57
av SM7UCZ
Jag hade denna text i 16F873

;************************************************************
delay1
clrwdt
clrf slask
clrf slask1
movlw .25
movwf slask1
lab1
clrwdt
decfsz slask,f ;fördröjningsregister
goto $-2
decfsz slask1,f
goto $-4
return ;återgå dit anropet kom ifrån

;***********************************************************

När jag ändrat "goto lab1" funkade programmet

Postat: 3 juni 2008, 18:25:02
av JockeE
I PIC18 tar varje instruktion två byte, vilket innebär att alla instruktioner ligger på jämna adresser, om du bara hoppar en byte hamnar du helt fel. Alltså måste goto $-1 bli goto $-2.
Men vissa instruktioner tar upp ännu mer utrymme, dessutom blir koden svårläst med dessa $xxx. Så jag rekommenderar starkt att man använder riktiga labels istället.

Postat: 3 juni 2008, 18:32:29
av SM7UCZ
Då har jag en förklaring.
Jag fick ju även en varning vid kompileringen
Tack!

Postat: 3 juni 2008, 19:17:00
av sodjan
Strunta help i $-hopp och kör med labels enbart.
En anledning har du just upptäckt...

> Jag fick ju även en varning vid kompileringen

- Exakt vilken varning var det ?
- Vad sa den varningen dig ??
- Varför fanns inte varningen med i ditt *första* inlägg ????

Är det det faktum att du fick en varning som du menar "funkar dåligt" ??

Postat: 3 juni 2008, 19:20:12
av strombom
Helt underbart roligt att det verligen fungerade just "dåligt" i den här koden :) (den missar ju bara clrwdt)

clrwdt
decfsz slask,f ;fördröjningsregister
goto $-2
decfsz slask1,f
goto $-4

att goto $-4 hoppar via goto $-2 var störtskönt :D

Postat: 3 juni 2008, 19:25:38
av ahlsten
sodjan skrev: 1. Exakt vilken varning var det ?
1. Vad sa den varningen dig ??
2. Varför fanns inte varningen med i ditt *första* inlägg ????
Fibonacci-numrering? :)
Lite OT, sry...

Postat: 3 juni 2008, 19:32:38
av strombom
ahlsten: du ska självklart addera siffran med antalet frågetecken och dela med två (avrunda uppåt)