Forum: Compiler & IDEs code Optimierung bei 32 bit Variablen


von Daniel R. (zerrome)


Lesenswert?

hallo,

ich frag mich grade wie man diese zeilen besser hinbekommt?

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

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

von Peter (Gast)


Lesenswert?

Was meinst Du mit besser?

von Gast (Gast)


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.

von Peter (Gast)


Lesenswert?

Vieleicht so:

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

von Daniel R. (zerrome)


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 :)

von Daniel R. (zerrome)


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 
;)

von Peter (Gast)


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:
1
if (fatType == 32) 
2
{
3
  i_max = 0xffffffff;
4
}
5
else // alle anderen Werte
6
{
7
  i_max = 0xffff;
8
}
9
10
while(i != i_max)
11
{
12
  i=fat_getNextCluster(i);
13
}

von Daniel R. (zerrome)


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:

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

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
Noch kein Account? Hier anmelden.