srry aber irendwie versteh ich das jetzt nicht..
btw bedeutet nebenbei bemerkt (by the way) und bezog sich auf das fehlende Seikolon das zu einem Absturz führen würde wenn es sich um die finale while()-Schleife handeln sollte. Die Funktion main() darf nie verlassen werden! Das würde aber geschehen wenn das while(1) ohne ; ausgeführt werden würde.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
srry aber irendwie versteh ich das jetzt nicht..
Shorty93:
Deine code
while (1)
return 0;
meint etwas wie: "fur immer blasse deine letzte atem aus". Aber das ist unmöglich.
Das sollte sein:
while(1);
return 0;
Weil das ist gleich wie: "tu immer nichts, aber danach blasse deine letzte atem aus". Das hört kommisch an, aber stimmt doch fur Asuro. Weil er immer in der while schleife bleidt, und deshalb immortal (ist das auch einer deutscher wort??) ist. Dammit endet main() nie.
Wenn den cpu doch bei "return 0" angekommen ist geht er einfach weiter weil Main das hauptprogram ist. Normale funktionen geben hier ein wert zuruck zum hauptprogram, oder zu einem funktion der sie angerufen hat. Und den cpu geht weiter in dem code der ihn angerufen had. Aber das kann nicht mit Main, weil es ein Uber-uber-uber-(Gott)-funktion is. Den instruktionszahler geht einfach weiter und arbeitet den 'instruktion' im nachsten programspeicherplatz. Deshalb hast du gesehen deine Asuro spielt alte programmen ab. Den sind noch drin und nicht uberschrieben beim flaschen. Wenn du ein grosses program geflashet hattet wurde er danach in verbotenes code gehen (wie den bootloader der am ende sitzt, wen ich mich nicht irre) oder den instruktionszahler geht durch den maximum wert und startet wieder am anfang bei 0. Aber das ist auch nicht erlaubt. Deshalb muss er immer den selbe gedanke machen.
Ich hoffe diesen analogie hat das ein bisschen erklärt.
hmm, ich habe gerade einer post von radbruch gesehen. Aber das ist nun verschwunden.![]()
jetzt hab ichs einiger maßen verstandenn DANKE!
Nächstes Problem kommt bestimmt...^^*
Ich hab keine Nachricht von Radbruch nach deiner gesehn..
Ich hatte auch was zum Verlassen von main() mit return(0) geschrieben. Da Valen dies in seinem (editierten ;) Beitrag schon erwähnt und ich deshalb zu langsam war habe ich meinen Beitrag wieder zurückgezogen :)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
achso.. trotzdem danke für die antwort![]()
Ach so, hatte ich mir auch gedacht. Aber vielleicht hatte den forum server sich auch verschluckt oder so. Ja leider brauche ich manchmal so einer halbe stunde mit editieren meiner post. Warum ich das nicht gleich bemerken kannst ist mir ein rädsel.Zitat von radbruch
![]()
Hi ab schon wieder ein neues problem..
der asuro soll gerade aus fahren, wenn er anstoößt rückfahrn und sih drehen, danach soll er wieder vorwaärtsfahren und so weiter..
Hier ist mein Programm:
while (1) {
if(PollSwitch()>0) {
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
for(i=0; i<1000; i++) Sleep(144);
MotorSpeed(100,150);
for(i=0; i<1000; i++) Sleep(144);
}
else { StatusLED(GREEN);
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}
}
while (1);
return 0;
}
Irgendwie funktioniert das so nicht..( er fährt nur rückwärts und fährt ne kurve..) kkann mir jemand die sleep funktin erklären und mir einen tipp geben was an meinem programm falsch ist?
Danke schonmal
Gruß
shorty
Das ist nicht das kompleten program! [-X
Er denkt er erfuhrt ein anstoss. Aber das sind den störungen von den motoren. Du muss mehrfach Pollswitch nacheinander benutzen und den werten vergleichen ob sie stabiel sind.
Lesezeichen