目次 メニュー†コメント†コメントはありません。 Comments/mkawasaki 過去の日記†11月2日†C : enum型で大量に宣言した連番をifで分岐に使うときの話†もし enum tag1 {NOSTUFF=0,A,B,C,D,E,F,G,H,I,J}; enum tag2 {NOCODE=0,CODE_C,CODE_D,CODE_E,...,CODE_C10}; // (30個とか40個とかあるとしゅごい) のように大量にenumで宣言してあり、 if(nanika==areka){ if(koreha==A)sound=CODE_C; else if(koreha==B)sound=CODE_D; else if(koreha==C)sound=CODE_E; ... else sound=NOCODE; } if(nanika==soreka){ if(koreha==A)sound=CODE_C4; else if(koreha==B)sound=CODE_D4; else ... else sound=NOCODE; } if(nanika==nannda){ ... } return sound; のようにenumで宣言(=連番)したものを条件と照合し、別のenumで宣言したものを出力(ここではsound)する場合、上記の書き方よりも define KOREHA_NUM (ここに条件に必要なアルファベットの数) int i=0; // BYTE でもいい if(nanika==areka)sound=CODE_C; // index else if(nanika==soreka)sound=CODE_C4; else ... for(i=NOSTUFF;i<KOREHA_NUM;++i){ // i=0 if(koreha==i+1)sound+=i; // i+1=Aなのでこれと一致する場合sound+=0; } とした方が良い(気がする)。 もちろんだがenumで宣言する際に意味のある順番で並ばせる必要がある。 ( ^^) ( ;;)ブワッ まぁけどenumで大量に宣言とかあんまり使わないよなぁ… と思ったけどWikipediaによると列挙型に数値演算はあんまりやらない方が良いみたい http://ja.wikipedia.org/wiki/%E5%88%97%E6%8C%99%E5%9E%8B Cは列挙型に数値を自由に設定出来る上に演算も許されてるから上記の走査が出来るだけで、Javaとかではそのまま整数との演算は許されてない…だと……? 11.08.24(wed)†UARTのBaud Rateについて†UARTで値を見るときに何かときどきおかしい値が出るor値がズレているというのはBaud Rateが合っていない可能性があります 分周は N=Sysclk/(8*BaudRate) で計算して四捨五入した値使えば多分大丈夫 11.07.25(mon)†PSoCのI2CHWモジュールについて†タッチセンサを使うときにslave側に秋田先生のサンプルを入れる人へ バージョンアップした状態で自分でslave側のプログラム新しく書けば出来そうな気もする(試してない)。Designerが5.0から5.1に変わったのに伴ってサンプルコードとかが修正されてたり変わってたりするので古いプロジェクトとか使うときは注意。 |