Hallo, ich habe ein Problem mit einem Modulo vergleicher. Ich lese aus einem FAT Dateisystem Cluster informationen rein zB. (0x0003) mit diesem "vergleicher" while(( Cluster_Location_Address % 512) != 0) { Address_Overflow++; Cluster_Location_Address--; } Das geht gut und recht bis zu 0x0080, am Anfang multipliziere ich den Wert noch mals 2, also 0x0100...Dann gibt es Probleme.. Kann es sein das, das Modulo Ergebnis nur 8bit ist? Der höchste Wert den der Modulo "vergleicher" rechnen musst ist logischer weise 511 bzw. 510.. Wie kann ich dieses Problem umgehen? Es wäre sehr ärgerlich wenn modulo nur bis 8bit geht... Grüsse
welcher prozessor? welcher compiler? und ein wenig mehr C-Code... welche deklarationen hast du gemacht?
Also ist ein PIC18F8520, compiler ist MPLAB C18 und deklarationen wie folgt: unsigned long int Cluster_Location_Address; unsigned short int Address_Overflow;
ich kenn MPLAB zwar nicht, aber hast du schon mal versucht eine variable mit dem modulo ergebniss zu beschreiben und dann im debug modus anzusehen?
Zu deinen Moduloproblem direkt kann ich dir nichts sagen, aber einen Tipp am Rande hab' ich: Modulo-Operationen mit Zweierpotenzen gehen sehr schön mit bitweisem "und": x%(2^n)=x&(2^n-1) x % 512 = x & 511 Beispiel: 7%4=3 bzw.: 7=111.b 4-1=3=11.b 7&3=111.b & 11.b=11.b=3 Bitweise Operationen sollte der Compiler ja mit mehr als 8 Bit machen können und diese Variante ist sogar noch einiges schneller (war zumindest bei mir auf nem XScale so: http://www.pocketmatrix.com/forums/viewtopic.php?t=15995&highlight= ) Beste Grüße, Bartl
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.