Atmega16 delay Compilererror

Gast #2070989
Lesenswert?

Hallo, vielleicht kann mir hier jemand helfen, ich habe ein 
Compilerproblem mit folgendem Code:

_delay_us(Korrektur1);

inialisiert als:

uint32_t Korrektur1=0;

wenn ich Compalieren will bringt er immer eine Fehlermeldung die lautet:

163 error: __builtin_avr_delay_cycles expects an integer constant


kann mir villeicht jemand sagen, wo der Fehler liegt? Habe schon im 
Internet geschaut und finde nichts dazu.
Gast #2070995
Lesenswert?

heiko_h schrieb:
> 163 error: __builtin_avr_delay_cycles expects an integer constant

steht doch da, du sollte nicht eine variable übergeben sonder eine wert.
(delay ist ein Makro und arbeitet sonst nicht richtig)

Falsch:
uint32_t Korrektur1=0;
_delay_us(Korrektur1);


Richtig:
_delay_us(1);
Gast #2071036
Lesenswert?

In der Korrektur1 Variablen steht bei mir ein Zeitwert drin, den ich aus 
einem Timer ausgelesen und in Korrektur1 übergeben habe. Wie kann ich
delay dann definieren das mir delay genau so lange verzögert wie es in
Korrektur1 steht? Korrektur 1 hat nach jedem Programmablauf einen 
anderen Wert.
Gast #2071050
Lesenswert?

Habe gerade etwas in einem Tutorial gefunden, das scheint mir eine 
Verzögerungsschleife zu sein.

_delay_loop_1(uint8_t __count)


dann müsste das so ja eventuell gehen


_delay_loop_1(uint32_t __Korrektur1)
#2071059
Lesenswert?

heiko_h schrieb:
> ... das mir delay genau so lange verzögert

Wobei  man die _delay_* eh meist nicht nehmen kann, wenn es
genau sein soll.
Die warten nicht nämlich nicht wirklich eine bestimmte Zeit,
sondern verballern einfach CPU-Zeit.
Das bewirkt die erwartete Verzügerung bestenfalls dann, wenn
das Warten nicht durch eine ISR unterbrochen wird. In diesem
Fall verlängert sich die Wartezeit klammheimlich um die
Rechenzeit der ISR.
Gast #2071178
Lesenswert?

heiko_h schrieb:
> Habe gerade etwas in einem Tutorial gefunden, das scheint mir eine
> Verzögerungsschleife zu sein.
>
> _delay_loop_1(uint8_t __count)
>
>
> dann müsste das so ja eventuell gehen
>
>
> _delay_loop_1(uint32_t __Korrektur1)

Kann mir jemand was du der Delay loop sagen? Kann ich dort meine 
Korrektur1 Variable einfügen?
Gast #2071657
Lesenswert?

g457 schrieb:
>> Kann mir jemand was du der Delay loop sagen?
>
> Ja, die Doku :-) Ums kurz zu machen: Nein, das ist nicht das was Du
> suchst. Machs so wie oben vorgeschlagen mit einer schönen Schleife
> aussen rum.

Dann könnte ich die Schleife aber auch so schreiben ohne das delay zu 
verwenden.

for (Korrektur1 != 0; Korrektur1--)
{}

So müsste das doch auch gehen, oder?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren