Så hittade ÄNTLIGEN vad problemet var . Varför det fungerade med asm vet jag inte men jag upptäckte att OSCCAL-värdet var inkorrekt och då jag satte detta fungerade det aldeles utmärkt
Just OSCCAL har jag aldrig ställd i något projekt och de har fungerat ändå så för mig låter det extremt osannolikt att det är orsaken till felet, jag skulle närmre tro att instruktionen i sig har flyttat det egentliga felet på ett sätt som gör att programmet nu fungerar.
jag skulle närmre tro att instruktionen i sig har flyttat det egentliga felet på ett sätt som gör att programmet nu fungerar
Ja, det låter betydligt mera sannolikt. Och isåfall har du egentligen inte löst (eller ens hittat) det riktiga problemet, bara dolt det. Det brukar inte vara speciellt bra. Förr eller senare slår det alltid tillbaka. Du kanske får tillbaka felet senare när du har mycket mera saker att leta fel i. Det är alltid bättre att försöka gå till botten med dom fel som man har aktuella, istället för att ta det senare. Om det finns möjlighet.
Det var när jag testade att använda pickit 2 för att ladda över hex-filen som jag upptäckte att OSCCAL hade ett ogiltigt värde. Jag har inte satt detta i koden utan jag lät bara pickit 2 ändra värdet och nu kan jag programmera PIC:en som vanligt från MPLAB. Så jag har inte ändrat någonting i min kod utan bara programmerat in ett nytt OSCCAL-värde en gång.
Problemet var ju inte att jag inte fick ett program att köra utan att jag inte fick något program skrivet i C att köra.
> utan att jag inte fick något program skrivet i C att köra.
Fortfarande lite konstigt...
Gick det överhuvudtaget *in* i processorn ?
Gav PICkit2 något fel under programmeringen ?
Vänta lite här nu...
Detta är en processormodell med en RETLW instruktion inlagd från
fabrik på den sista platsen i programminnet ! Och du hade alltså
lyckats "pilla bort" den så när C-programmet sedan försökte anropa
den med ett CALL h'3FF' (vilket sannolikt läggs dit automatiskt av
kompilatorn) så gick det naturligstvis snett. Ja, så måste det vara.
En lite konstig sak är att PICkit2 borde ta hand om detta. Alla vettiga
programmerare känner till att detta ligger i minnet och ser till att läsa ut
det först (innan Erase All) för att sedan automatiskt skriva tillbaka det igen.
D.v.s utan att man gör något själv. Sannolikt finns det något sätt att
kringgå automatiken (t.ex genom att mauellt köra en separat Erase All
operation), men då ställer man till det lite för sig...
Att ditt ASM program fungerade beror på att du struntade i anropet för att
kalibrera processorn. Och nu har du en okalibrerad processor eftersom
du har tappat bort original värdet (antar jag)...
Låter väldigt rimligt hur det försvann från början har jag ingen aning om då jag endast genomförde en programmering följt av en en "erase the target device" i MPLAB. Någonting måste dock gått fel där, och jo det stämmer att jag nu dessvärre sitter på en okalibrerad processor
Tackar för förklaringen, då klarnade det ytterliggare lite
Normalt gör programmerare det när man gör en om-programmering.
D.v.s den sparar kalibreringsinfo tillfälligt under erase och skriver tillbaka
det vid programmeringen. När du bara gör en Erase All, så finns det ju
ingenstans att göra av det...