ページ 11

条件式

Posted: 2017年8月02日(水) 11:06
by ぱおぱお
C言語の勉強をはじめたばかりの者です。
勉強がてらポートBの入力状態を判断して出力パターンを決めるプログラムを作ってみたところ
switch文の条件式(PORTB)から抜け出せません。
質問①
この記述の仕方は違うのでしょうか?
正しい記述方法を教えてください。
質問②
いちいち出力パターンの関数を作ってるのですが
このやり方が正しいのかどうかわかりません。
もっと簡単な記述方法があったら教えてください。

コード:

void main(void) {

    TRISB    = 0b11111111;
    PORTB   = 0b00000000;

    while(1){
        switch(PORTB){
            case 0b00000001: PATTERN0; break;
            case 0b00000010: PATTERN1; break;
   //本当は8パターンあるが省略
        }
    }
    return;
}

void PATTERN0(void){
    while(1){
        PORTAbits.RA0 = 1;
        __delay_ms(500);
        PORTAbits.RA0 = 0;
        __delay_ms(500);
    }
}
void PATTERN1(void){
//省略
}

Re: 条件式

Posted: 2017年8月02日(水) 11:11
by みけCAT
ぱおぱお さんが書きました:switch文の条件式(PORTB)から抜け出せません。
「条件式から抜け出せない」とはどういうことでしょうか?
どうやってそれを確認しましたか?
すぐ外側に無限ループがあるので、switch文ばっかりをずっと実行するのは自然でしょう。
ぱおぱお さんが書きました:質問①
この記述の仕方は違うのでしょうか?
正しい記述方法を教えてください。
PATTERN0;などの処理をしない文が、間違いとは言えませんが気になりますね。
関数を呼び出すには、関数呼び出し演算子()を用いてPATTERN0();のようにします。
ぱおぱお さんが書きました:質問②
いちいち出力パターンの関数を作ってるのですが
このやり方が正しいのかどうかわかりません。
もっと簡単な記述方法があったら教えてください。
出力パターンをどの程度共通化できるかなどにもよりますが、
例えば関数をいちいち作らずにswitch文の中に処理を直接書く、という方法が考えられます。

Re: 条件式

Posted: 2017年8月02日(水) 12:18
by ぱおぱお
みけCAT さんが書きました:
ぱおぱお さんが書きました:switch文の条件式(PORTB)から抜け出せません。
「条件式から抜け出せない」とはどういうことでしょうか?
どうやってそれを確認しましたか?
すぐ外側に無限ループがあるので、switch文ばっかりをずっと実行するのは自然でしょう。

申し訳ありません。書き方がおかしかったですね。
MPLAB XのシミュレータでPORTB0のビットを立てステップ実行したのですがcaseに移行しないのです。
ぱおぱお さんが書きました:質問①
この記述の仕方は違うのでしょうか?
正しい記述方法を教えてください。
PATTERN0;などの処理をしない文が、間違いとは言えませんが気になりますね。
関数を呼び出すには、関数呼び出し演算子()を用いてPATTERN0();のようにします。

なるほど。了解です
ぱおぱお さんが書きました:質問②
いちいち出力パターンの関数を作ってるのですが
このやり方が正しいのかどうかわかりません。
もっと簡単な記述方法があったら教えてください。
出力パターンをどの程度共通化できるかなどにもよりますが、
例えば関数をいちいち作らずにswitch文の中に処理を直接書く、という方法が考えられます。
出力パターンは2つのビットをdelay時間を変えながらLチカさせようと思っていたので
共通化できそうもない(思いつかない)のでこの方法で書いていきます。

Re: 条件式

Posted: 2017年8月02日(水) 13:34
by ぱおぱお
ぱおぱお さんが書きました:質問①
この記述の仕方は違うのでしょうか?
正しい記述方法を教えてください。
PATTERN0;などの処理をしない文が、間違いとは言えませんが気になりますね。
関数を呼び出すには、関数呼び出し演算子()を用いてPATTERN0();のようにします。

()を記入したらPATTEN関数を呼び出せるようになりました。
さらに別の問題が出てきましたがとりあえずこの問題は解決しました。
みけCATさん、ありがとうございました。