Forum: Compiler & IDEs Anfängerproblem


von Oli (Gast)


Lesenswert?

Hallo
Ich habe erst angefangen mit Mikrocontroller und schon bin ich auf ein 
Problem gestossen, dass ich leider alleine nicht lösen konnte. Danke für 
eure Hilfe.

Also ich benütze nicht den GCC sonder IAR Embedded Workbench. Ich möchte 
gerne so ein "Lauflich" programmieren. Für euch sicher eine simple 
Angelegenheit, aber ich weiss einfach nicht wie ich die LEDs wieder 
"auslöschen" soll.

Hier das Programm:

#include <io4433.h>

char led[]={0x20,0x10,0x08,0x04,0x02,0x01};
char digit = 0;


void main(void)
{
   DDRB = 0xFF;
   PORTB = 0xFF;

   for(;;)
   {
   digit++;
   if (digit>9) digit=0;

   PORTB=led[digit];
   }
}

von Joerg Wunsch (Gast)


Lesenswert?

> char digit = 0;

Das = 0 ist überflüssig.  Weiß nicht, wie der IAR reagiert,
aber beim gcc würde Dich das ein zusätzliches Byte im Flash
kosten, um die 0 noch zu transportieren.  Per definitionem
sind in C globale und statische Variablen beim Start auf 0
gesetzt.

Du zählst von 0 bis 9, hast aber im Feld led[] nur 6 Werte.
Damit dürften für Index 6...9 zufällige Werte aus dem RAM
ausgegeben werden.

Aber Dein eigentliches Problem ist, daß das Programm in
seiner Schleife so rasend schnell durchläuft, daß Du das
,,Laufen'' des Lichts einfach nicht mehr erkennen kannst...
Weiß nicht, ob der IAR irgendwelche Macros für definierte
delays kennt, ansonsten mußt Du Dir eine kleine Schleife
runterzählen, um ,,ein bißchen'' zu warten.  Die Variablen
in der Schleife deklariert man sinnvollerweise als "volatile",
damit der Compiler die Schleifenzähler nicht wegoptimiert,
wenn er feststellt, daß ja in der Schleife nix passiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.