2017-10-04 41 views
1

私は現在、私は基本的ForWhileループをコーディングでひどいように見えるいくつかの理由C.
でコード化されMSP430G2553、で働いている、と私はWhileループに時間がかかるようにする方法を見つけ出すことはできませんすべての反復後に完了します。Cコード:遅くなる各繰り返しの後にループしますか?

基本的に、起動時に100msでLEDが点滅しています。

私はボタンを押したまま、私はLEDを点滅させたいと思っています。

私が去るとき、LEDは遅く点滅する速度を保つべきです。

次に、2番目のボタンはLEDの点滅速度を100msに戻します。

今は、ボタンを押したときにLEDが点滅するのを遅くすることができますが、遅くなることはありません。正直なところ、私はこれを行う方法についてはわからないので、私はここにアカウントを作成して投稿した。

for(;;) //loop forever 
{ 
    if((P1IN & BIT3)==BIT3) //if button is not pressed 
    { 
     i = 0; 
     a = 4000; //At 10000, 4 cycles per second, or 250ms delay. 4000 cycles = 100ms or 10Hz delay. 
     P1OUT ^= BIT0 + BIT6; //two LEDs 
     while(i < a) //delays LED blinking until while-loop is complete. 
     { 
      i = i + 1; 
     } 
    } 
    else if((P1IN & BIT3)!=BIT3) //if button is pressed 
    { 
     i = 0; 
     a = 10000; 
     P1OUT ^= BIT0 + BIT6; 
     while(i < a) //delays LED blinking until while-loop is complete. 
     { 
      a = a + 2; 
      i = i + 1; 
     } 
    } 
} 
+0

を遅らせる(for範囲外)「グローバル」を維持する必要があるだろう醜いfor-loopsのためにCPUの負荷が100%になりますが、今のところ私はこれらのfor-loopsを割り込みブロックに転送するのは明らかにひどいです。また、MSP430のクロックが長時間にわたって変化してしまったとしても、何か問題がありました。だから、私は適切なCPUコーディングに移る前に、これを実現するために必要なロジックをハッシュアウトしようとしています。 – Martian

答えて

1

あなたはおかげでみんな、私は理解して最後のボタンの押しを追跡するカウンタ、または遅延

int button1Pressed = 0; // "global" flag 
for(;;) 
{ 
    if((P1IN & BIT3) != BIT3) // if button pressed 
    { 
     button1Pressed = 1; 
    } 
    if((P1IN & BIT4) != BIT4) // hypothetical button 2 press 
    { 
     button1Pressed = 0; 
    } 
    int delay = 4000; 
    if(button1Pressed) 
    { 
     delay = 10000; 
    } 
    while(delay>0) { 
     delay = delay - 1; 
    } 
} 
関連する問題