www.mikrocontroller.net

Forum: Compiler & IDEs fehler beim Compiler??


Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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>

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schneller :-)

Matthias

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist. Ich wusste es.

(dabei heisse ich gar nicht Bernd)

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.