Sida 1 av 1

Stänga av shadow under alla calls och return, PIC18F442?

Postat: 19 september 2008, 02:55:11
av nanopile
Skulle vilja att shadowregistren i PIC18F442 inte påverkas alls när man gör en call.
Man kan ju skriva ", 0" på slutet av varje rad i programmet men jag har ju redan gjort runt 500 rader innehållande call och hittar inget sätt att göra det automatiskt så man inte missar någon enda liten rad.
Ideer?

Postat: 19 september 2008, 03:13:01
av bearing
Såhär kan du finna call-raderna som saknar ett komma:

Kod: Markera allt

>grep -n -H call main.c | grep -v ,
Det ger detta svar:

Kod: Markera allt

main.c:7:call label4
main.c:9:call label5
Om det körs på en main.c som ser ut såhär:

Kod: Markera allt

call label1, 0
nop
call label2, 0
nop
call label3, 0
nop
call label4
nop
call label5
nop
call label6, 0
nop
(Om du vill göra sökningen på alla filer i mappen kan du byta ut main.c mot en asterisk. Lägg till -r så söks rekursivt i alla filer i undermapparna.)

Det går säkert att fixa så att ", 0" läggs till på raderna som saknar men det vet jag inte hur man gör.

Postat: 19 september 2008, 04:00:21
av bearing
Det går att göra med texteditorer som kan spela in macron, t.ex. Crimson Editor. Sök först efter 'call' och gå till början av den raden. Spela sedan in: <F3> <end> <,> < > <0>. Håll in ALT+1 (som är snabbtangenterna för det första inspelade macrot) tills ", 0" är tillagt i hela filen.

Postat: 19 september 2008, 05:08:19
av nanopile
Tackar, den där Crimson Editor var en bra sak.
Lyfter på hatten :)

Blev lite förvånad när du skrev om C eftersom jag programmerar i assembler men jag kan ju inte gärna förvänta mig att folk ska vara tankeläsare hehe.

Postat: 19 september 2008, 05:41:19
av bearing
Ojdå =) c-filen innehöll dock assemblersyntax... =) Varsågod.

Postat: 19 september 2008, 10:32:20
av sodjan
> Man kan ju skriva ", 0" på slutet av varje rad...

Eller inget alls. "0" är default.
Vad är det för problem du försöker fixa ?

Postat: 19 september 2008, 17:09:51
av nanopile
Oj, jag läste fel i databladet.
Kunde ha svurit på att det stod 1=default.

Case closed, problemet löst.

Det jag försökte göra var att lista ut var i programet jag har felet som gör att programräknaren hamnar fel och börjar från 0x0000 igen.

Postat: 19 september 2008, 17:19:42
av sodjan
OK. :-)

Att du hamnar på h'0000' igen kan bero på olika saker.
- En RESET instruktion i koden (inte sannolikt).
- Watchdog timeout. Inte troligt om WDT inte är "på".
- Runaway code, d.v.s att din kod snurrar iväg tills PC "slår runt" till h'0000'.
- BOR. Finns STATUS flaggor som talar om ifall det var det.
- Extern MCLR reset. Finns STATUS flaggor för det också.

Finns säkert några orsaker till...