mikrocontroller.net

Forum: Compiler & IDEs code Optimierung bei 32 bit Variablen


Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich frag mich grade wie man diese zeilen besser hinbekommt?

while(!((i==0xfffffff&&fat.fatType==32)||(i==0xffff&&fat.fatType==16))){
  i=fat_getNextCluster(i);
}

wobei fat.fatType ein unsigned char ist und i ein unsigned long int...
das muss besser gehen oder?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst Du mit besser?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So allgemein wird man da nicht sagen können. Was für eine Platform? 
8Bit, 32Bit?

Schuss ins blaue: Der Compiler wird das mit Optimierungen schon gescheit 
machen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieleicht so:

if (fatType==16) i_max=0xffff;
if (fatType==32) i_max=0xffffffff;
while(i != i_max)
{
  i=fat_getNextCluster(i);
}

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

avr-gcc ist der compiler und die plattform atmega 8 bit.

@ Peter

auf die idee bin ich noch nicht gekommen, das vorher klarzumachen und 
die schleife dann einfach laufen zu lassen...
probier ich gleich mal aus, danke.

weitere vorschläge trozdem willkommen :)

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow,

als while schleife 64 bytes als do while mit kleiner änderung, bekomme 
ich den schleifen teil von 92 bytes auf 40 runter, das hat sich gelohnt 
;)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst Dir noch überlegen ob fatType noch andere Werte als 16 oder 32 
annehmen kann, bzw. was dann passieren soll.

Falls dann als default immer i_max = 0xffff sein soll, würde das 
Programm folgendermassen noch etwas kürzer:
if (fatType == 32) 
{
  i_max = 0xffffffff;
}
else // alle anderen Werte
{
  i_max = 0xffff;
}

while(i != i_max)
{
  i=fat_getNextCluster(i);
}

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es gibt nur 32 und 16, von daher ist das genau so wie du schreibst ok.
diese prüfung auf 32 oder 16 mache ich dann jetzt nur ein mal bei der 
initialisierung, danach ändert sich ja nix mehr...die schleife 
allerdings hab ich hier und da mehrmals im code, was jetzt schon 
wesentlich kleiner wird. vor allem dann noch so, wenn i lokal und i_max 
global ist:


  do{
     i=fat_getNextCluster(i);
  }while(i!=i_max);


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.