MSP-430: komisches Verhalten in supersimplen Programm/Zählproblem

Gast #1022350
Lesenswert?

Hallo Forum,

hoffentlich bin ich hier richtig. Falls nein: sorry; vielleicht können 
die Mods meinen Thread ja verschieben. Einen passenden älteren Beitrag 
habe ich auch nicht finden können.

Ich will acht LEDs auf einem MSP-430-Board als Lauflicht programmieren.
Mein Code sieht so aus:
1
#include <msp430x16x.h>
2

3
int main(){
4
  int n, i = 0;
5
  P3DIR = 0xFF;
6
  P3SEL = 0x00;
7

8
  // Endlosschleife
9
  while(1) {
10
    if (i == 0) {
11
      // LEDs alle ausmachen.
12
      P3OUT = i;
13
      i += 1;
14
      continue;
15
    }
16
    // LEDs auf 1, 2, 4, 8, .... setzen.
17
    P3OUT = i;
18
    i *= 2;
19
    // Wenn die hochwertigste LED geschaltet wurde: von vorne (ab 0).
20
    i %= 255;
21
    for (n = 0; n < 200; n++) {;} // <- !!!!
22
  }
23
  return 0;
24
}

Soweit funktioniert das alles wunderbar (i nimmt nur 0 und 
Zweierpotenzen an, die werden auf das LED-Byte geschrieben), die LEDs 
werden jedoch viel zu schnell geschaltet (sie "stehen" sozusagen alle).
Um in meiner Schleife also eine zeitliche Verzögerung zu erreichen (auf 
sleep() o.ä. kann ich nicht zugreifen), habe ich das mit "!!!!" 
markierte for-Schleifenkonstrukt eingefügt. Mit einem Durchlauf bis 200 
blinken meine LEDs aber nur unwesentlich langsamer.
Sobald ich den Durchlauf erhöhe, n also bis zu einem größeren Wert gehen 
lasse, werden plötzlich nicht mehr alle LEDs geschaltet. Schon ab einem 
Durchlauf bis n=799 leuchten nur noch die niedrigwertigsten 6 LEDs.

Aber wieso!? Ich hab mir darüber heute morgen in der Uni den Kopf 
zerbrochen, mein Betreuer wusste auch keinen Rat.

n und i hängen doch nicht zusammen, ich hab' echt keinen Plan.

Hat jemand hier im Forum vielleicht einen Tipp?
Wenn ich das nächste Mal in's Labor darf, würde ich mich gerne mit etwas 
anderem beschäftigen.
Habe ich in meinem Programm vielleicht irgendwas übersehen?

Könnte mir außerdem jemand sagen, wieso ich beim Kompilieren einen 
Fehler bekomme, wenn ich INTs innerhalb des Quelltextes deklariere, und 
nicht unmittelbar nach dem main()-Einsprungpunkt? Ist das einfach eine 
Schwäche des verwendeten Compilers (an der Uni benutzen wir die MSP IAR 
Embedded Workbench)?

Wenn jemand Rat wüsste oder mir Tipps geben könnte wäre das wirklich 
super.

Vielen Dank im Voraus und viele Grüße
Benni
Persönliche Seite #1022480
Lesenswert?

Benni wrote:
> Hallo Forum,
>
> hoffentlich bin ich hier richtig. Falls nein: sorry; vielleicht können
> die Mods meinen Thread ja verschieben. Einen passenden älteren Beitrag
> habe ich auch nicht finden können.

Tz...

> Forum: Codesammlung
> Wenn ihr eigene Programme oder Anleitungen geschrieben habt könnt ihr sie
> hier posten. Fragen werden gelöscht!

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