fertige delay_ms(int ms)

Gast #148879
Lesenswert?
• ▲
▼
Hi Leutz,

Für alle, die noch suchen:

nach einigem rumdoktorn und ausprobieren hier eine Möglichkeit, das
delay_ms() aus CVAVR auch im WinAVR verwenden zu können:

!! Ab Version WinAVR-20050214 !!

#define F_CPU 8000000UL  // 8 MHz
#include <avr/delay.h>

void delay_ms(int ms)
{
  int t;
  for(t=0; t<=ms; t++)
  _delay_ms(1);
}

Ein paar mehr Ticks gehen hier zwar für Aufruf, Variable anlegen und
das Ausführen der for-schleife verloren, das sollte aber nicht so
problematisch sein ;-)

Möglich sind hier dann auch ohne Probleme Aufrufe wie delay_ms(1000);
usw...


Greetz,
thorsten
Gast #148885
Lesenswert?
• ▲
▼
"Ob die Funktion vernünftig ist..."


delay_ms(1000);

ist es jedenfalls nicht, denn es bedeutet im Klartext 16.000.000
absolut nutzlos vergeudete CPU-Zyklen.

Wenn ich z.B. eine 1s-Blink-LED baue, dann will ich definitv nicht eine
Sekunde lang einen Taster drücken müssen, bis die CPU endlich so gnädig
ist, es entgegen zu nehmen.


Jede CPU kann viele Dinge gleichzeitig tun, wenn man sie denn läßt.


Peter
Gast #821034
Lesenswert?
• ▲
▼
Ich habe diese Funktion (delay_ms(1000)) ausprobiert. Mein Programm hat 
mit dieser Funktion ca. 1.5 kByte mehr Speicher gebraucht. Weis jemand 
warum so
eine einfache Funktion gleich so viel Speicher braucht?

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