dynamische Wertübergabe an _delay_us

Gast #4513622
Lesenswert?
• ▲
▼
Hallo
Wie kann ich während der Laufzeit der Funktion _delay_us Werte 
übergeben?
Diese Werte ändern sich mit der Laufzeit des Programmes und werden aus 
einem Array [30][2] ausgelesen?
Text der Fehlermeldung: __builtin_avr_delay_cycles expects an integer 
constant.

Im Anhang der Programmauszug.
Angehängte Dateien:
#4513638
Lesenswert?
• ▲
▼
@ Helmut Br (Gast)

>Wie kann ich während der Laufzeit der Funktion _delay_us Werte
>übergeben?

Gar nicht.

>Diese Werte ändern sich mit der Laufzeit des Programmes und werden aus
>einem Array [30][2] ausgelesen?

Solche kleinen, VARIABLEN Verzögerungen muss man wohl oder übel selber 
per Inline ASM machen.

Workaround. Anstatt die einzelnen Delays aus dem Array auzulesen und 
zuzuweisen (was nicht funktioniert), schreibt man für alle Möglichkeiten 
die Sequenz komplett mit konstanten Werten hin und wählt mittels Array 
die Sequenz aus, welche ausgeführt werden soll.
Gast #4513644
Lesenswert?
• ▲
▼
Nachtrag:
entweder eine eigene delay_us() mit Timern erstellen oder, so mache ich 
es gelegentlich der Einfachheit halber und wenn die absolute Genauigkeit 
keine große Rolle spielt, das ganze in einer Schleife mit der festen 
Grundeinheit unterbringen, z.B. mit:
1
for (i=0; i<Dauer; i++)
2
   {
3
     _delay_us(100); 
4
   }
kannst du n*100µs über die Variable Dauer dynamisch verändern.
Bei sehr kleinen Grundzeiten ist da natürlich ein Overhead durch die 
Schleife vorhanden.
Gast #4513645
Lesenswert?
• ▲
▼
Helmut Br schrieb:

> Wie kann ich während der Laufzeit der Funktion _delay_us Werte
> übergeben?

Garnicht und das ist auch gut so. Idealerweise benutzt man diese 
vermaledeiten Delay-Funktionen überhaupt nicht. Und für die (relativ 
wenigen) Fälle, bei denen es einen Sinn ergibt, sie zu verwenden, reicht 
es aus, das Delay statisch zur Entwurfszeit konfigurieren zu können.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.