Onderstaande code werkt prima met arrays
maar als ik de bewerking met pointers doe
niet ( comment zijn pointer bewerkingen).
Wat kan er gaande zijn?
//==============================================================================
void Char2Digit(char byte,char Digit) // Write a Char in Digit Buffer 0-7
{
char *ptr=bm; // point our pointer to pixel buffer
char *ptr2=F5x7; // point To 5x7 Font Table
char Ctmp=0,Ca=0;
byte-=0x20; // Correct Offset to Space
for(Ca=0;Ca<7;Ca++) // 7 bytes per Digit
{
Ctmp=F5x7[ (byte*7)+Ca]; // Deze werken prima !!
bm[Digit + (ca*8) ]=Ctmp; // Deze werken prima !!
//Ctmp= *(ptr2 + (byte *7)+Ca); // Dit niet !!
// *(ptr + Digit + (Ca*8) )=Ctmp; // Dit niet !!
}
}
Bekijk de lst file eens en zie wat de copiler van de statements maakt. Wellicht dat je dan ervan af kunt leiden wat er fout gaat.
RobHoi
42
Zoek eens uit in welke van de twee pointer statements het mis gaat door een van de foute code regels met een goede (array) code regel te mixen (twee mogelijkheden dus).
Sommige compilers kunnen er ook niet goed tegen dat variabelen tijdens de declaratie al een waarde krijgen. Probeer eens eerst de twee pointer variabelen te declareren en daarna pas een waarde toe te kennen.
In dit geval gaat het wel goed omdat je 8 bits waarden gebruikt, maar in het algemeen moet je wel opppassen met pointer bewerkingen. Als de pointer naar een 16-bits waarde wijst en je telt er 1 bij op, dan wijst deze naar de volgende 16 bits waarde; met andere woorden: de pointer staat 2 bytes verderop.
Andere tip: stel altijd een zo hoog mogelijk warning level van de compiler in; dan wordt je door de compiler op mogelijke fouten geattendeerd.
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Op 14 december 2009 23:31:44 schreef driessens_nl:
Bekijk de lst file eens en zie wat de copiler van de statements maakt. Wellicht dat je dan ervan af kunt leiden wat er fout gaat.
Dat is DE manier inderdaad. Doen dus!