Ich verwende(te) die 2.7er-Lib doch nicht. 8-[Zitat:
Das Problem hatte ich vor allem bei dem Programm für die Ermittlung der Parameter für die myasuro.h-Datei aus der LIB.
mic
Druckbare Version
Ich verwende(te) die 2.7er-Lib doch nicht. 8-[Zitat:
Das Problem hatte ich vor allem bei dem Programm für die Ermittlung der Parameter für die myasuro.h-Datei aus der LIB.
mic
@damaltor
Na gut ich habe fürchterlich übertrieben mit den 'Meilen'.
Ausserdem gebe ich dir natürlich Recht, dass das ganze eine eigene Vorliebe ist.
Aber der HEX-Output bei deinem Beispiel ergibt immerhin 22 Byte Unterschied zugunsten der IF-Orgie.
Size before:
test.elf :
section size addr
.text 1600 0
Size after:
test.elf :
section size addr
.text 1622 0
Je nachdem, welchen der beiden IF_CODE-Zeilen auskommentiert gibt es da die Unterschiede:
Benutzt man aber die Variante, dass die IF's eigendlich mit "else if" fortgeführt werden sollten um so halbwegs performat zu sein, reduziert sich dieser Vorteil auf popelige 4 Byte bei dem 10-er Beispiel:Code:#include "asuro.h"
//#define IF_CODE 1
#undef IF_CODE
int main ()
{
char wert, a=0;
wert = PollSwitch ();
#ifdef IF_CODE
if(wert==1){
a=wert+1;
}
if(wert==2){
a=wert+2;
}
if(wert==3){
a=wert+3;
}
if(wert==4){
a=wert+4;
}
if(wert==5){
a=wert+5;
}
if(wert==6){
a=wert+6;
}
if(wert==7){
a=wert+7;
}
if(wert==8){
a=wert+8;
}
if(wert==9){
a=wert+9;
}
if(wert==10){
a=wert+10;
}
#else
switch (wert){
case 1:
a=wert+1;
break;
case 2:
a=wert+2;
break;
case 3:
a=wert+3;
break;
case 4:
a=wert+4;
break;
case 5:
a=wert+5;
break;
case 6:
a=wert+6;
break;
case 7:
a=wert+7;
break;
case 8:
a=wert+8;
break;
case 9:
a=wert+9;
break;
case 10:
a=wert+10;
break;
}
#endif
return a;
}
-> Und hier liegt ein entscheidender Vorteil vom swtich/case: Performanter, da ein Sprung zur Stelle erfolgt die gerade benötigt wird und eben nicht ein 'rumraten' wohin es denn nun gehen soll.
Size before:
test.elf :
section size addr
.text 1618 0
Size after:
test.elf :
section size addr
.text 1622 0
Code:#include "asuro.h"
//#define IF_CODE 1
#undef IF_CODE
int main ()
{
char wert, a=0;
wert = PollSwitch ();
#ifdef IF_CODE
if(wert==1){
a=wert+1;
}
else if(wert==2){
a=wert+2;
}
else if(wert==3){
a=wert+3;
}
else if(wert==4){
a=wert+4;
}
else if(wert==5){
a=wert+5;
}
else if(wert==6){
a=wert+6;
}
else if(wert==7){
a=wert+7;
}
else if(wert==8){
a=wert+8;
}
else if(wert==9){
a=wert+9;
}
else if(wert==10){
a=wert+10;
}
#else
switch (wert){
case 1:
a=wert+1;
break;
case 2:
a=wert+2;
break;
case 3:
a=wert+3;
break;
case 4:
a=wert+4;
break;
case 5:
a=wert+5;
break;
case 6:
a=wert+6;
break;
case 7:
a=wert+7;
break;
case 8:
a=wert+8;
break;
case 9:
a=wert+9;
break;
case 10:
a=wert+10;
break;
}
#endif
return a;
}
@radbruch
Ja was soll das denn? Nicht die LIB benutzen, ist das denn erlaubt? ;-)
Der Hinweis von mir bezog sich nur auf die Speicherplatz-Probleme die ich bei dem Asuro-Programmteil hatte um da alle Tests unterzubringen.
hrhr... da hast du natürlich recht... ;)
@damaltor
Deine neue Fußzeile läßt mich folgende Vermutung anstellen:
Bist du Fan von Prinzenrolle? Dann sollten wir uns mal zusammentun mit einer großen Familienpackung. (Eine für dich und eine für mich natürlich) ;-)
prinzenrolle fetzt... aber ja! doppelkekse fetzen auch und kosten etwa 1/4 vom original. aber sie gehen eben nicht in die keksdose :(
aber jo, lass uns mal doppelkeks-abend machen XD
bei mir Fährt er immer, wenn man einemal eine Taste gedrückt hat. Weiß allerdings nicht, woher das kommt. Vielleicht, wenn man zulange eine Taste drückt?Zitat:
Zitat von Mr.Roboto
wenn du mein programm nutzt, dürfte das nicht sein, evtl. speicherst du das eingegebene zeichen in eine variable, wenn du dann kein neues zeichen eingibts, fragst du das gespeicherte ab, nicht das, was aktuelle über die tastatur kommt
Soweit ich weiß benutz ich dein Programm. Zumindest benutz ich. Vielleicht kommt es zwischen den verschiedenen Libaries zu irgendwelchen Fehler. Ich benutze die von der Asuro CD. Die ist vom 17.10.2003. Kann es sein ,das du irgendeine andere Libary hast?
Gruß Roboaktiv
jo, ich benutz die aktuelle Version, hab aber in dem programm nur standard funktionen verwendet, denk isch :-)
Hallo,
es existiert kein Unterschied zwischen der CD-Version und der aktuellen LIB.
Beide Versionen sind absolut identsch.
Da Mr.Roboto die SerRead()-Funktion ja im 'blocking'-Mode aufruft, muss sie auch lange warten, bis das eine geforderte Zeichen kommt.
Wenn aber tatsächlich einmal ein Zeichen (w,s,a,d) zum Starten der Motoren gekommen ist, gibt es auch keinen Code mehr, der die Motoren stoppt.
Die 'große' while-Schleife landet dann ja wieder im SerRead(), wartet dort auf ein nun nicht kommendes Zeichen, und die Motoren drehen weiter.
Somit geht es also so wie Mr.Roboto sagt. Bei mir tut's das jedenfalls auch genau so. Er läuft, und läuft, und läuft, .... und genau dafür braucht man die lange Leitung ;-)