[[作業日誌]] 目次 #contents(); *メニュー [#wa300896] //個人ページの下にページを作ることもできます。 //自分のページを追加したい場合は、[[名前/新しいページ名]]または[[./新しいページ名]]という風にしましょう。 //-[[./てすとぺーじ]] **コメント [#z0384db8] //ラジオボックスがうざいっていう人は、replyを消してみて下さい。 #pcomment(reply); **過去の日記 [#bb8af614] //ページが長くなってきたら、過去の日記として別ページに保存するのがおすすめっす //-[[./2008年4月]] *11.11.02 [#n6ec0649] ** C : enum型で大量に宣言した連番をifで分岐に使うときの話 [#s6277aaf]もし 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内の順番だけ書きかえればいいし、条件のnanikaが多いとその分倍々にコードが(無駄に)増えていく。せっかくenumで連番で宣言しているならfor文でインクリメントして走査した方が良いと思う [#q2674182] もちろんだがenumで宣言する際に意味のある順番で並ばせる必要がある。順不同で宣言なんかしたら連番の意味がないです( ^��^)ていうかenumで宣言したらこういうこと思いついてもいいはずなのに諸々終わった後に気付いた俺はバカだ( ^��^) *11月2日 [#n6ec0649] ** C : enum型で大量に宣言した連番をifで分岐に使うときの話 [#s6277aaf] もし 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内の順番だけ書きかえればいいし、条件のnanikaが多いとその分倍々にコードが(無駄に)増えていく。せっかくenumで連番で宣言しているならfor文でインクリメントして走査した方が良いと思う もちろんだがenumで宣言する際に意味のある順番で並ばせる必要がある。 順不同で宣言なんかしたら連番の意味がないです( ^��^) ていうかenumで宣言したらこういうこと思いついてもいいはずなのに諸々終わった後に気付いた俺はバカだ( ^��^) ( ^��^) ( ;��;)ブワッ まぁけどenumで大量に宣言とかあんまり使わないよなぁ…enum便利だから皆使うといいさ! まぁけどenumで大量に宣言とかあんまり使わないよなぁ… enum便利だから皆使うといいさ! と思ったけどWikipediaによると列挙型に数値演算はあんまりやらない方が良いみたい http://ja.wikipedia.org/wiki/%E5%88%97%E6%8C%99%E5%9E%8B Cは列挙型に数値を自由に設定出来る上に演算も許されてるから上記の走査が出来るだけで、Javaとかではそのまま整数との演算は許されてない…だと……?自分の感覚としては大量の状態を連番で#defineするような感じです要は可読性…ッ!可読性の向上…ッ!マジックナンバーの…圧倒的…ッ圧倒的な見にくさ……ッ!!(言い訳) Cは列挙型に数値を自由に設定出来る上に演算も許されてるから上記の走査が出来るだけで、Javaとかではそのまま整数との演算は許されてない…だと……? 自分の感覚としては大量の状態を連番で#defineするような感じです 要は可読性…ッ!可読性の向上…ッ!マジックナンバーの…圧倒的…ッ圧倒的な見にくさ……ッ!!(言い訳) *11.08.24(wed) [#d8d2b0c5] **UARTのBaud Rateについて [#k03994fa] UARTで値を見るときに何かときどきおかしい値が出るor値がズレているというのはBaud Rateが合っていない可能性があります~ Acknowrichなどでは任意でBaud Rateを変えられますが用意されているものを使った方が良いらしいです。(9600bpsとか14400bpsとか) 分周は N=Sysclk/(8*BaudRate) で計算して四捨五入した値使えば多分大丈夫 *11.07.25(mon) [#ve901881] **PSoCのI2CHWモジュールについて [#mb22557c] タッチセンサを使うときにslave側に秋田先生のサンプルを入れる人へ~ Designer5.1でプロジェクトを読み込むとI2CHWのバージョンが違うので更新しますか、というメッセージが現れます。 これを更新してslaveにダウンロードするとおそらく動きません。原因はMaster側のプログラムでReadStatusが変わらずCompleteになっていないことと思われます。(けどデータは送れてる)~ 解決法としては~ "I2CHWをバージョンアップせずにslaveにダウンロード"~ "バージョンアップした状態でslave側を変えずmasterのプログラムでReadStatusのフラグを読む行を書かない(コメントアウト)"~ の2択?~ バージョンアップした状態で自分でslave側のプログラム新しく書けば出来そうな気もする(試してない)。Designerが5.0から5.1に変わったのに伴ってサンプルコードとかが修正されてたり変わってたりするので古いプロジェクトとか使うときは注意。 IP:133.28.96.26 TIME:"2011-11-02 (水) 15:20:10" REFERER:"http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php" USER_AGENT:"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2"