Jag vill krångla till anrop mellan ASM och C18

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
PeterSfa
Inlägg: 22
Blev medlem: 26 augusti 2009, 10:33:55
Skype: peterfagerbrant
Ort: Norsborg
Kontakt:

Re: Jag vill krångla till anrop mellan ASM och C18

Inlägg av PeterSfa »

Jag tror det. Dubbelkollade efter ditt tips och allt verkade rätt i ASM delen.

För att testa att ASM delen verkligen gör en call till 6000 där C programmet ligger, så lade jag in en ASM snutt i C modulen:

Kod: Markera allt

_asm 
movlb	1	
movf	0x162,0,1
movlb	2
movwf	0x210,1
_endasm
Den hämtar från en timer som ligger snurrande i ASM modulen och kopierar till 0x210

När jag tittar på värdena i minnet, så sätts värdena allt eftersom timern flödar över.
Dock sätts inga värden till de minnespositioner jag angett med mina C pekare.
I SIM sätts de som de skall.

Men som sagt inte när cpu'n körs.
Har jag missat något i pekaren
ram char *opMode = (ram char*)0x200;

ram skall vara default vad jag förstått, men angav det ändå för att vara 100%
Om jag förstod C18 manualen rätt, så behöver jag inte tänka på bankerna med denna typ av addressering. Jag kan ha läst eller förstått fel även om jag nu omläser den rejält.

Jag kollar minnesadresserna över RS232 när jag kör cpu'n, där jag dumpar ut minnesadress med innehåll. Därför ser jag när värden är satta och inte.

D.v.s, anropet till C modulen görs rätt. inline ASM kod i C modulen körs rätt, vilket "bevisar" rätt anrop till C modulen.
Men sätta minne med mina C pekare. Funkar inte.
För tillfället är slutsatsen att jag missat något vad gäller pekare.
PeterSfa
Inlägg: 22
Blev medlem: 26 augusti 2009, 10:33:55
Skype: peterfagerbrant
Ort: Norsborg
Kontakt:

Re: Jag vill krångla till anrop mellan ASM och C18

Inlägg av PeterSfa »

Då var det löst.

Kompilatorn alternativt länkaren städade bort minnesplatsen som lagrades i pekaren. Pekaren stod alltså ganska effektivt på 0x00 när den kördes i CPU´n, men inte i körning i SIM.
Med en separat initiering av pekarna så fungerar det.

"Skräpkoden" som den ville länka in fick jag bort med att göra en egen länkscript där jag valde att inte ha med c018i.o

Tog ett bra tag med mycket slita hår ;), men när jag väl hittade "mina" värden på 0x00 så var det snabbt fixat.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Jag vill krångla till anrop mellan ASM och C18

Inlägg av Icecap »

Ganska rätt egentligen. Om din pekare är en RAM-variabel måste något ju initiera den, detta "något" måste även köras innan main aktiveras vilket jag skarpt ogillar. Det finns kompilatorer som lägger in en "kopiera från ROM till RAM" innan main aktiveras, sedan är det smak och tycke om man gillar detta.
PeterSfa
Inlägg: 22
Blev medlem: 26 augusti 2009, 10:33:55
Skype: peterfagerbrant
Ort: Norsborg
Kontakt:

Re: Jag vill krångla till anrop mellan ASM och C18

Inlägg av PeterSfa »

Jag förtår ditt tankesätt.
Jag är van i C/C+ att det alltid blir det jag angivit och inget annat. Har jag angivit en defaultinitiering så skall den också bli en sådan, om kompilatorn stöder det.

Om kompilatorn inte stöder det, så skall den ge ett kompileringsfel. Att acceptera deklarationen som jag angav den och sedan bakom ryggen på mig sätta den till NULL, kändes lite tufft.

Vad jag förstått under tiden jag lär mig PIC programmeringen, så har Microchip relativt många buggar i sina produkter.
För några dagar sedan hittade jag dessutom en i IDE som nollställde hela min källkods huvudfil. Alltså satte den till filesize=0 utan att fråga eller skapa backup, allt bara försvann. Det enda jag gjorde var SaveAs av ett nytt fönster.

I morgon fortsätter jag titta på bootloadern. Såg att det fanns ett antal freeware tillgängliga på nätet utöver microschips egna så jag tänkte titta på dem och se hur tankegången för loader varit.

Nå, nu blir det inte så mycket programmering idag iaf. Skall ut i skärgården och städa den plats jag har husvagnen stående på.
Skriv svar