Hi. Ich versuche mich am mega 128 mit dem avr-gcc (GCC) 3.4.1 Compiler, aber wie verstehen uns irgendwie nicht. Neben 1000 anderen Dingen die einfach nicht funktionieren wollen, gibt die folgende Zeile (Bitte nicht deren Sinn kommetieren!!) nichts aus, wohingegen die gleiche Zeile ohne for-Schleife genau das tut, was man von ihr erwartet. for (i=1;i==7;i++) { display_cursor(1,9); display_string("mist"); } Falls nebenbei noch jemand eine Idee hat, wie ich eine Variable auf meinem Display ausgegeben bekomme wäre ich auch über diesen Tip dankbar.
Hi 100 mal schreiben: Ich will C lernen. Copy&Paste gilt nicht. Schau dir mal die Definition der for-Schleife an dann wirst du sehen das der Fehler garantiert nicht beim Compiler liegt. BTW: Man sollte sich vor einer solch simplen Frage mal selber die Frage stellen ob es überhaupt sein kann das der Compiler einen solch banalen Fehler macht. Du bist bei weitem nicht der einzigste der den AVRGCC benutzt. Würde er bei einer so simplen Schleife aber schon scheitern wärst du nicht der erste dem das auffällt. Matthias
Den Inhalt der Klammer hinter dem Wort "for" solltest Du Dir nochmal genauer ansehen. Hilfreich ist die Lektüre des Buches "Programmieren in C" von Kernighan & Ritchie in der zweiten Auflage, erschienen etwa 1990 im Hanser Verlag. Der Ausdruck in der Klammer hinter for enthält drei durch Semikola getrennte Ausdrücke - einen Initialisierungsausdruck, mit dem eine Startbedingung hergestellt wird (hier: i = 1) - ein Schleifenfortsetzungskriterium. Solange das zutrifft, wird der Inhalt des auf das for-Statement folgenden Blocks ausgeführt (hier: i == 7) - und ein Ausdruck, der nach jedem Ausführen des auf das for-Statement folgenden Blockes ausgeführt wird und oft zum Inkrementieren von Zählvariablen genutzt wird (hier: i++) Wie man leicht sieht, bewirkt der zweite Ausdruck (den ich Schleifenfortsetzungskriterium nannte), daß die Schleife kein einziges Mal durchlaufen wird, weil dieses Kriterium bereits durch den Initialisierungsausdruck nicht erfüllt wird. Besser funktionierte die ganze Chose, wenn da stünde: for (i = 1; i < 7; i++) { bla.. } Dann wird die Schleife sechs mal durchlaufen. <milder Sarkasmus> Fast 80% aller Leute, die einen Compilerfehler gefunden haben wollen, können nicht richtig C. Schreib' Dich nicht ab. Lerne C. </milder Sarkasmus>
Danke, Freunde! Ihr habt eine ungemein aufbauende Art!; Ich weiß das ich nicht C programmieren kann darum versuche ich es zu lernen! Ich habe den verdammten Fehler ca 4 Stunden lang gesucht. Inzwischen habe ich es geschafft meine Variable auszugeben. Zwei Probleme habe ich noch. Ich würde gerne eine Variable zusammenbasteln. Beispiel: Ich habe eine Variable aus 3 zweistelligen ints und möchte daraus eine Zeichenkette machen, die ich dann anzeigen kann? Geht sowas? 2. Meine jetzt endlich ausgegebene Variable wandle ich mit itoa um aber sie ist am Anfang 4 Zeichen lang und wird dann weniger, bis sie Null wird. Damit bleiben am Ende die Nullen stehen, so das die Zahl statt 0001 1000 anzeigt. Die drei Nullen am Ende sind natürlich nur stehen geblieben, von den vorhergehenden Programmzyklen. Muss ich jetzt aufwendig ausrechnen wieviele Stellen meine Zahl hat, oder gibt es einen einfachen Weg? @Rufus ich bin mir nicht sicher, aber könnte es sein, dass es in Pascal so ist, das die Schleife ausgeführt wird, bis das Kriterium erfüllt ist?
@Rufus Gibt es ggf noch etwas aktuelleres das auch die AVR Familie im speziellen behandelt? Ich hatte dam al was sehr schönes für die 8031, das Microcontrollerkochbuch hieß. Habe sowas leider noch nicht für die AVRs gefunden
Hi es herscht hier machmal ein etwas rauher Umgangston. Gewöhn dich dran. Wer hier ordentliche Fragen stellt (http://www.catb.org/~esr/faqs/smart-questions.html) bekommt auch meist ordentliche Antworten. Wenn du C lernen willst hilft dir sicher http://www.schellong.de/c.htm. Ein IMHO sehr gutes C Tutorial für Leute die schonmal (in einer anderen Sprache) programmiert haben. Ein gutes Buch zu den AVR's kenne ich leider nicht. Wie man eine Ganzzahl-Variable in einen String umwandelt wurde hier schon endlos oft dikutiert. Bemüh doch einfach mal die Forensuche. Matthias
@Matthias Die Forensuche ist zugegebener Maßen eine gute Sache, das Blöde daran ist, das man erst weiss wonach man suchen muss, wenn man die Lösung gefunden hat. String hätte ich hier nie gesucht, weil ich String nur von TP kenne.
"aber könnte es sein, dass es in Pascal so ist, das die Schleife ausgeführt wird, bis das Kriterium erfüllt ist?" Wenn ich das richtig erinnere, heißen Schleifen in TP "until". In C heißen sie aber "while". "for" ist nur ein Spezialfall davon (kann man immer nach "while" umschreiben). Peter
Tach, in Pascal (oder auch Delphi) würde das heißen for i:=1 to 7 do begin do_was_nettes; end; Ansonsten kann man natürlich auch, wie Peter sagt, mit i:=1; while i < 7 do begin do_was_toller; i:=i + 1; end; Schleifen bauen, oder auch mit i:=1; repeat do_was_abgefahrenes; i:=i+1; until i > 7; Bis zu einem anderen Thread, gesundes neues Jahr! Stefan
das kommt davon, wenn man auf zu viel hochzeiten tanzt. PS. In Excel heist es dann =solange(i<7) =tu(was(nettes())) =weiter() Danke Euch allen! Ich melde mich wenn mich das Nächste Problem heimsucht zu dem mir die Forensuche keine Lösung anzubieten vermag. Ich vergnüge mich jetzt erst mal mit den AD-Wandlern und dann mit den Interrups und Timern Dann wisst ihr schon mal was als nächstes kommt
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.