mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Modulo Ergebniss


Autor: tk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: jÜrgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welcher prozessor?
welcher compiler?

und ein wenig mehr C-Code... welche deklarationen hast du gemacht?

Autor: tk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ist ein PIC18F8520, compiler ist MPLAB C18   und deklarationen wie 
folgt:

  unsigned long int Cluster_Location_Address;
  unsigned short int Address_Overflow;

Autor: jÜrgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Bartholomäus Steinmayr (sam_vdp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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... )

Beste Grüße,
Bartl

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.