www.mikrocontroller.net

Forum: Compiler & IDEs Delay Probleme nach Update


Autor: Christian Stark (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich arbeite seit ewiger Zeit mit der win avr 2004-04-04 und habe nun
eine Neuinstallation mit win avr 2005-02-14 am laufen.

Ich verwende ein delay.h include (siehe anhang) das mit der neuen win
avr nicht mehr funktioniert. Kompilieren tut er alles ohne Probleme. Es
sieht so aus, als ob die delays nicht mehr ausgeführt werden... also
keine Wartezeiten.

aufruf DELAY_US(1000); für eine ms und diese Routine wird dann noch
einmal 1000 mal aufgerufen für 1s.

F_CPU ist auf 16000000 gesetzt. Die neuen Makefiles bringen jetzt auch
diese Konstante mit. Ich habe es mit beiden Varianten probiert (F_CPU
über makefile vergeben mit UL am Schluß und so wie vorher)

Ich vermutete, daß evtl. die routinen "wegoptimiert" werden und
stellte den compiler auf omtimzation 0. Danach funktionierten die
Routinen einwandfrei. (Nur wird der Code serh groß)

Mit der alten win avr version lief das aber problemlos mit optimization
S !

Ich habe jetzt auch schon im Forum gesehen, daß jetzt anscheinend
Routinen in der avrlib-c enthalten sind. Das werde ich heute Abend
alles mal ausprobieren.

Aber wer kann mir den Grund dazu nennen, warum der Code nicht mehr
läuft? Oder vieleicht ein paar Tips, wie man möglichst kompatibel
bleibt.

(PS: Ich verwende Timer u. ISRs, aber an manchen Stellen benötige ich
trotzdem delays! :)  )

Merci!
Christian

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da der Compiler an diesem inline-asm-Kram nichts zu compilieren hat,
hat er auch nichts daran zu optimieren.  Aber wie das mit inline asm
halt so ist: das Zeug wird schnell hochgradig unübersichtlich.  Es
lässt sich daher nicht so recht auf Anhieb sagen, was da wohl nicht
geht.  Du müsstest das konkret in deiner Umgebung analysieren.

Der Schwenk auf <avr/delay.h> erscheint mir aber in der Tat
angebrachter, da du dann ein offizielles Interface der Bibliothek
benutzt.

Autor: Christian Stark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke! Habe jetzt die <avr/delay.h> eingebunden. Die funktioniert auch
im optimize s level.

Wenn ich die Doku richtig verstanden habe, dann ist der maximale Wert,
den ich der _delay_us(); geben darf 48!? (Bei 16MHz Takt) Übergebe ich
einen größeren Wert, dann wartet die Routine trotzdem nur den max.
möglichen Wert von 48 us oder?

Christian

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab' jetzt nicht nach den genauen Zahlen geguckt, aber so ungefähr
funktioniert es, ja.

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.