Problem mit for-Befehlen

Gast #76999
Lesenswert?
• ▲
▼
Hallo,

ich bin total neu bei den Mikroprozessoren und habe bisher nur Delphi
programmiert. Mit Elektronik kenne ich mich allerdings recht gut aus.
Ich wollte zunaechst so anfangen, dass ich einen Port z.B. im
1-Sek.-Takt dazu bringe, zu blinken. Leider scheitert dies an der
Wartefunktion, die ich aus einem Beispiel uebernommen habe.

Dort wird einfach i von 0 bis 32000 hochgezaehlt - theoretisch. Beim
Simulieren klappts auch aber wenn ich dann den MSP anschliesse macht er
das fuer i > 100 so schnell, dass ich es nicht messen kann und bei 1 >
1000 gar nicht mehr. Am Port bleiben 3,0V.
Ich habe das sowohl mit MSP430123_2 als auch MSP430F149 probiert. Ich
verwende erstmal die Kickstart Umgebung von TI da ich den parallel-JTAG
habe der soweit ich weiss nicht mit MSPGCC funktioniert.

Hier mein Code:

#include "msp430x14x.h"


void fa (void);
void fb (void);

void main(void){
//vClockInit();
P2OUT   = 0xFF;               /* LEDs */
     P2DIR   = 0xFF;
     P2IES   = 0x00;
     P2IE    = 0x00;
     P2SEL   = 0x00;
fa();}

void fa (void){
int i, a;

for (a=0; a<10; a++){
i = 0;
for (i=0; i<100; i++);}

P2OUT |= 0x01;
fb();

}

void fb (void){
int i, a;

for (a=0; a<10; a++){
i = 0;
for (i=0; i<100; i++);}
P2OUT &= ~0x01;
fa();
}
Gast #77001
Lesenswert?
• ▲
▼
Also wenn ich das richtig verstanden habe dann sollte ich i als volatile
int deklarieren? Geht aber auch nicht.... mit 1000 gings noch aber bei
10000 bleibt er einfach in der Schleife haengen, weiss nicht ob er die
dauernd ausfuehrt oder oder gar nicht (am Port liegen halt 3V).

void fb (void){
volatile int a;

for (a=0; a<10000; a++);

P2OUT &= ~0x01;
fa();
}
Gast #77003
Lesenswert?
• ▲
▼
hab ich schon - aber der definitionsbereich von int reicht ja schon
ueber 32000! das aendert nichts.
bin ich so dumm dass ich so eine uebung nicht hinbring oder was ist da
los?!?

adrian
Gast #77006
Lesenswert?
• ▲
▼
Ich denke mal, dass der Compiler die for-Schleife komplett wegoptimiert,
da sie keine Anweisungen enthält.
Versuch's mal so:

volatile int i
for (i=0; i<10000; ) i++;

Gruss
Christian
Gast #77007
Lesenswert?
• ▲
▼
Ich habe die Sache noch etwas verdeutlicht mit printf - mit i<1500
bekomme ich die Ausgaben "on" und "off", bei i<3000 nicht mehr?!

Irgendwie bleibt er wohl in der for-Schleife haengen.... Ich habe den
MSP430F149 nur an den JTAG angeschlossen, davon bekommt er auch die
Stromversorgung und ansonsten haengt er woertlich in der Luft (da fehlt
doch nicht etwa etwas?).

Nein, was mich total stutzig macht, ist, dass es bis ca. i<1500
funktioniert.... Ich beginne an der Logik des Programmierens zu
zweifeln!

Hier der deutlichere Code:

void onOff (void){
volatile int i;

while(1){
 for (i=0;i<3000; ) i++;

 P2OUT |= 0x01;
 printf("on");

 for (i=0; i<3000; ) i++;

 P2OUT &= 0x01;
 printf("off");}
}
Gast #77012
Lesenswert?
• ▲
▼
Oh, habs erkannt... da fehlt ein ~ da hab ich mich bei den vielen
Versuchen halt ein Mal vertippt ;-)
Warum bitte funktioniert das bis zu einem bestimmten i Wert und dann
nicht mehr?!?

Gruesse, Adrian

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.