dynamische Wertübergabe an _delay_us

Gast #4513622
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:
@ 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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.