PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion __delay_cycles();



Dirk
15.10.2008, 22:00
Hallo Leute,

ich bin gerade dabei, ein Programm vom IAR EWAAVR Compiler auf AVR-GCC zu übertragen.

Da kommt die Funktion __delay_cycles(X) vor, die es so ja in GCC auch in der delay.h nicht gibt.

Wer kennt den EWAAVR Compiler und kann mir sagen, ob diese Funktion genau um eine bestimmte Anzahl von Taktzyklen verzögert? Ich habe keine Lib gesehen, die für diese Funktion eingebunden wurde. Wo kann ich evtl. nachlesen, wie diese Funktion arbeitet?

Gruß Dirk

bb_stefan
15.10.2008, 22:22
Da IAR das Rad ja nicht jedes Mal neu erfinden wird, sollte der folgende Link auch für den AVR gelten:
http://tech.groups.yahoo.com/group/msp430/message/32543

Dirk
15.10.2008, 22:40
Hallo bb_stefan,

danke, das hat geholfen.

Dann könnte ich doch in GCC die Funktion _delay_loop_2 (uint16_t __count) aus der delay_basic.h nehmen. Oder muss ich was eigenes machen?

Gruß Dirk

bb_stefan
15.10.2008, 23:13
Ich kenne mich leider weder mit GCC noch mit AVRs aus.
Ich persönlich wäre mit solchen _delay_cycle Sachen eher vorsichtig, je nachdem was Du damit erreichen willst (Genauigkeit, etc.). Vorallem da es so unterirdisch schlecht dokumentiert ist, weiß man nie, was dabei tatsächlich für eine Verzögerungszeit rauskommt.
Wenn's auf Genauigkeit ankommt, würde ich immer zu einem Timer raten!

s.o.
16.10.2008, 06:40
Ich habe hier mal im Forum edelay.h veröffentlicht, das funktioniert zu 100% und ist genau das was du suchst.

Dirk
16.10.2008, 19:31
Hallo s.o.,

deine edelay.h ist echt gut.

Wenn die Funktion __delay_cycles() des IAR-Compilers genau so funktioniert, habe ich ja einen 1:1 Ersatz.

Gruß Dirk