mikrocontroller.net

Forum: Compiler & IDEs Pausen in c


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Welche Header Datei muss ich einbindn damit ich z.B. delay als Pause
nutzen kann? ich möchte eine Zeitverzögerung haben. Oder muss man die
wie in ASM selbst herstellen?
Gruss
Frank

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
der Link geht leider nicht!
Frank

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du WinAVR nutzt, dann hast du die avr-libc Doku auf deiner
Festplatte.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, ist wohl ein Bug in der Forumssoftware. Du mußt das <u> und das
</u> in der URL-Zeile des Browsers entfernen.

Oder geh einfach nach http://www.nongnu.org/avr-libc/user-manual/ und
klicke dich durch.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Danke für den Link. Ist mir jetzt schon klarer. Aber wie kann man da
Pausen von > 1sec. kriegen???
Frank

Autor: Detlef Wilken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo


In meinen Augen ist der Delay-Befehl ebenso zu sehen wie der
goto-Befehl: Finger weg !
Damit wird der Controller nur zum nichtstun verdonnert !
Je komplexer das Programm wird, desto wichtiger wird es, Wartezeiten
für andere Aufgaben zu nutzen, um die Effizienz zu erhöhen.

Statt einem Delay sollte man unbedingt auf Timer zurückgreifen. Ich
selbst habe mir ein Zeitscheibensystem gebastelt, in der ich mittels
eines Timers verschiedene "Zeitscheiben" (10ms, 20ms, 40ms...)
verwende. Dieses System dient bei mir als Betriebssystem des
Controllers. Innerhalb der einzelnen Zeitscheiben werden die
Funktionsaufrufe eingebaut.

Zum Beispiel: Abfrage eines Temperatursensors wird in der 1280 ms -
Zeitscheibe aufgerufen. Zeitkritischere Anwendungen werden dann in der
10 ms-Zeitscheibe angestoßen.

Damit lassen sich auch wunderbar Wartezeiten realisieren, die die
anderen Funktionalitäten nicht zum Stillstand zwingen.

Gruß
Detlef

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache ich auch so wie Detlef.

Die Funktion setzt eine Variable auf die Wartezeit und der
Timerinterrupt zählt diese runter.
In der Mainloop machst Du die anderen Sachen und testest nebenbei die
Variable auf 0 und dann erst gehts weiter.
Mit 10ms Interrutpzeit kannst Du mit einem Byte max 2,55s warten.

Wenn Du allerdings 16Bit-Zählvariablen nimmst, muß das Testen und
Setzen immer unter Interruptverbot erfolgen, da ein 16Bit-Zugriff nicht
atomar ist !


Peter

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal eine Frage:
Wie macht ihr denn die Pausen bei der I2C-Kommunikation z.B. Auch über
Timer?

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas,

natürlich nicht.

Für kurze Zeiten (SW-I2C) sind Delay-Loops durchaus sinnvoll.

Aber alles über 1ms ist in meinen Augen CPU-Zeitverschwendung und kann
besser genutzt werden.


Peter

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.