AT90S2323 2 Probleme

Gast #166589
Lesenswert?

µC Typ: AT90S2323
Takt: 10 MHz Quarz
Programmer: Atmel AVRISP
Compiler: WinAVR
-----------------

Problem 1: _delay_ms() Befehl und Taktfrequenz
Egal welche Taktfrequnz ich im Makefile angebe, die Zeiten  die ich
beim delay-Befehl angebe, stimmen nachher nie.
Beim AT90S2323 gibt es keine Fusebits, mit denen ich den Takt
einstellen kann, denn den AT90S2323 kann ich nur mit einem ext. Quarz
betreiben.

Merkwürdigerweise, stimmen die Zeiten, wenn ich z.B. einen ATtiny 26
intern mit 1 MHz takte, egal was ich im Makefile eintrage.

Muss ich noch irgendwo die Taktfrequenz eintragen, ausser im Makefile,
oder geht der delay-Befehl nur mit 1 MHz ???

Problem 2: -- bzw ++
Wenn z.B. das hier schreibe:

...
t=10
for(;;)
{
t--;
//mach irgendwas;
if (t==0) goto next;
}
next:
....

Sobald ich ++ oder -- zum zählen benutze,
wächst mein Code plötzlich auf bis zu das 6 fache.
Das verstehe ich irgendwie nicht.
Gast #166593
Lesenswert?

Autsch, das tut weh. (Schmutziger geht die Programmierung ja ncht mehr.)


for(;;)
{
t--;
//mach irgendwas;
if (t==0) goto next;
}

das macht man doch besser so:

for(t = 0, t <= 10, t++)
{
   blubber schwall;
}

goto wird in der C-Programmierung nicht benutzt.

Zur Erklärung der for-Schleifenparameter:

das t = 0 setzt den Startwert der Variable beim Aufruf der Schleife
fest. Der zweite Parameter setzt deinen Endwert fest und der dritte
gibt an, wie gezählt werden soll (pre-, post-, increment oder
decrement)

So durchläuft er die Schleife so oft, bis t = 10.
Gast #166595
Lesenswert?

Nach meinem ANSI-C-Buch ist es egal, ob man in einer For-Schleife t++
oder ++t schreibt, es wird auf alle Fälle als postincrement aufgelöst.

Das mit dem goto ist keine gute Technik, aber wenn es ist erlaubt laut
C. Also nict so laut schimpfen.

Die obige Schleife lässt sich etwas eleganter auflösen:
t=10;
do
{
//irgendwas
}
while(t);

oder wenn ein Dekrement in der nicht in den Anweisungen stattfindet:

t=10;
do
{
//irgendwas
}
while(--t);

Das garantiert eine bestimmte Anzahl Durchläufe.

MW

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