mikrocontroller.net

Forum: Compiler & IDEs Anfängerproblem


Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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];
   }
}

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.