« 2010年4月 | トップページ | 2010年9月 »

2010年5月24日 (月曜日)

LED チカチカまでが結構長かった(余談)

昨日のエントリで書き忘れていた事があったので余談として書いておきます。

6月号のHEWで動作させてみるサンプル「LEDチカチカ」はタイマ割り込みを使ったプログラムです。これはこれで十分に初歩的なものなのですが、マイコンの世界に初めて入ってきた方にとってはこれでもちょっと「?」な世界だったりするものです。

まぁ、タイマのハンドラはJavaやVisualStudio.NETあたりから来た方で、Timerクラスなんかを使った事のある方であればイメージはそんなに難しくなくて、「main関数の冒頭の部分でこの命令を実行する事によって、この関数(ハンドラ)が1秒置きに実行されるんですよ」でほぼ納得できると思うのですが、I/Oポートの値を設定する事によってLEDがOn/Offする部分が意外とイメージしづらいみたいです(と言うか、最初は自分がそうでした。負論理でビットOnでLED消灯って何それ!って本当に思いましたからw)。

でもまぁ、ここもI/Oポートへの操作をラッピングしたled_on()とかled_off()とかの関数を作る事でだいぶイメージがしやすくなるみたいですね。

んで、そこにさらに輪をかけて割り込みを使わないLEDチカチカプログラムをちょっと載せてみようかなと思います。中で何も行わないforループについて賛否両論あるかと思いますが、まずは直感的なイメージが大事だと思ってます。誌面に掲載の割り込みを使ったプログラムが上手く動かなくて、「ちょっと挫折気味」な方がいたらこのプログラムで「とにかくマイコン基板とのコンタクトは取れているんだな」と安心していただけたらなと思います。

Led_2

はい、これがプログラムです。って、画像ですがね。ま、簡単なんで練習だと思って手で入力してみてください(ファイルはmain関数のある、SH7262_LED.cです)。既存のサンプルの一部(タイマの設定と割り込み発生許可の部分)をコメントにして、後はLEDの点灯/消灯関数のプロトタイプ宣言を追加しています。無限ループ内は

ちょっと時間を空けてLED点灯、ちょっと時間を空けてLED消灯

と言う定番な処理です。クロックが結構早い(インターフェース誌最速!は伊達じゃない!w)ので3000000回なんてベラボーなループ回数になっているのはご愛嬌です。

これが無事に動けば多分、タイマ割り込み使用版の方は設定のどこかがおかしいと言う事になります。マイコンとのコンタクトが取れた事に安堵しつつ、じっくりとプログラムを見直してみてください。

さて、世の中ではすでに液晶繋いだり、音出したりしている方もいらっしゃるようですね。こちらもじっくりとではありますが、色々触っていこうと思います(少なくとも液晶は繋いでみるつもり)。

| | コメント (0) | トラックバック (0)

2010年5月23日 (日曜日)

LED チカチカまでが結構長かった(その2)

前回エントリの最後に表示されたビルドエラー。調べてみると、ビルド途中に生成されたファイルをなんらかの理由で削除できなかった際に表示される様です。ビルド作業自体に干渉できるほどHEWには精通していないので、正直「手詰まり」な感じで途方にくれました。ビルド時に生成されるフォルダ類を全削除してやってもダメで、以前の「H8用の環境」が悪さをしているのかも…とHEWをインストールしなおしたりしても状況は変わらず。

それでも諦めきれず(ここで諦めちゃう人が結構多いかも)、何回もビルドを試していると以下の傾向に気がつきました。

  • エラーになる箇所が時々変わる
  • ビルド中のCPU負荷がエライ高い

この手の挙動は経験的に「PCスペックが原因」と考え、他に常駐しているアプリを終了させられるだけ終了させてみました。すると…

94033996

ようやくビルド完了!(ウォーニングが1件出てますが、今回はこれで良いようです)いやー、一時はどうなるかと思いました。これで一安心!と思いきや、その後も何回か同じ現象が発生した為、他のPCでも環境構築&検証を行って結果的に自宅で一番スペックの高いMacBook(Late2008)のBootCamp上が一番安定していると言う結果になりました(これはこれで、OSがVistaなので後述のシリアル接続HEWモニタの動作保証外だったりします)。

94037450

さて、続いてシリアル接続HEWモニタをインストールしてマイコン基板へのプログラムのダウンロードとデバッグを行うのですが、ここでもう一つ問題が発生。はい、色々なマイコンで仮想COMポートの設定をされている方はご存知かと思いますが、COMポートの番号がエライ事になってますw。ついうっかりインストール時とは別のUSBコネクタに繋いでしまうだけで別のCOMポートになってしまってちょっと困るアレです。今回のシリアル接続HEWモニタはCOM8までしか対応していないようで、それ以外だと接続エラーになってしまいます(HEWに限った事ではなく、他のツールでもCOM8までと言うケースは多いですね)。

94046393

ま、これには対処方法があって、デバイスマネージャで対象のCOMポートのプロパティを開いていくとある「詳細設定」の部分で別の番号に変更が出来ます。この辺りは他のマイコン基板で慣れていた事もあってスムーズに作業が出来るあたりがなんともですw。

さて、シリアル接続HEWモニタの設定も出来たら後はマイコン基板にプログラムをダウンロードして実行!なのですが、ここでもすんなりと行きませんでした。具体的には手順通りに「リセットして実行」を選んでもLEDが点灯しない!デバッガもなにやら途中の部分でブレークしてしまっているような感じ。コンソールにも「Abort」とか不吉な文字が表示されていました。

94341507

その後、諦めも悪く、何度か試してみると、ようやくLEDが点滅を始めました!このデバッガとの通信の挙動はやはり問題があるらしく、CQ出版社の特設ページで入手できる新しいバージョンを試す事で解消する事もあるようです(ちなみに私の環境ではまだAbortが表示されたり、デバッガの挙動が?な時があります)ので、定期的にチェックしてみてください。

と、ようやくこのエントリを書き終えましたが、もう数日で7月号が出てしまいますね。本エントリが6月号を買って試してみて「上手く行かないし、もうやーめた!」と思っていた人の引き留めにつながれば幸いです。

| | コメント (0) | トラックバック (0)

2010年5月22日 (土曜日)

LEDチカチカまでが結構長かった

SH-2Aマイコン基板のその後です。タイトルにもあるように、動作確認の定番である「LEDチカチカ」までが結構長かったです。まぁ、初めてこういった基板に触れる人で無い限りはあまり参考にはならないでしょうが、その辺の顛末をちょっと書こうと思います。

開発環境はルネサスエレクトロニクスから提供されるHEWと言うものを使いますが、今回環境を作ろうとしたPCにはこれをH8マイコンで作った際にすでにHEWをインストールしていました。とは言え、ターゲットとなるマイコンが違う事から「何か起きそう」な予感がして一旦アンインストールしてインストールをしてみました。

93992784_3

実際のところ、アンインストールを行っても完全なアンインストールとはなっていなかったようです。しかも、HEWの方でもその辺りが考慮されているようで、インストーラの画面には「マルチインストール」の選択肢が。マイコン毎で環境を変えたい場合はここで別のインストール先を選ぶと良いみたいですね。余談ですが、ツールのダウンロードに必要な「My Renesas」サービスは今年の3月にログイン方法が変わっている様なので、それ以前に登録していて、しばらく使っていない方は注意が必要です。

さて、今回HEW以外ににもDFUと言うツールが必要で、これが無いとターゲットデバイスであるSH72620のプロジェクトが作成できません。誌面ではインストールしたHEWのバージョンが

  • V.9.03 Release 02だとSH72620の情報が無いのでDFUが必要
  • V.9.03 Release 02以降をインストールの場合はDFUが不要

と、ちょっと混乱する表記になっています(私は後者に先に目が行ってしまい、「DFU入れなくてもいいのか」と勘違いしてしまいました。DFUは必要です)。後者は「V.9.03 Release 02より後(例えばRelease 03だとか、V.9.04とか)」と言う解釈ですね。

さて、環境が出来た後(と言いつつ、その後さらにシリアル接続HEWモニタのインストールが必要ですが)は「LEDチカチカ」のプログラムを行うためのプロジェクト作成とプログラミングです。割込みベクタ設定の部分、初めての人だと戸惑いそうな感じですね。言うまでも無いのですが、intprg.cの変更点は「#pragma行の追加」と「INT_CMT_CMI0関数の処理を記述(初期状態はsleep()呼び出しがコメントになっている。つまり処理無し)」ですね。あと、リスト5の修正箇所は579行目にあります(ま、Ctrl+Fで「175」を検索すれば一 発なんですが)。

プログラミングが終了したら、ビルドの設定を行ってビルドを行います。と、簡単に言ってもこの「ビルドの設定」、初めての人は結構大変だと思います。設定する項目が結構ありますし、16進数に慣れていても普段ハードウェア寄りの事をやっていない方は「失敗してマイコン基板壊れたらどうしよう」と言う心配はありますよね。まぁ、ここは誌面通りの設定が出来れば問題ありませんのでじっくりと取り組んでみてください。

94019897

 

と、偉そうな風を吹かせておきながら一通りビルド設定を済ませてビルドを実行してみるとこんな表示が…。な、…ビルドエラー…だと?(次回に続く)

| | コメント (0) | トラックバック (0)

2010年5月 7日 (金曜日)

「オブジェクト指向っぽいことをしなくても良いわけ」を考えてみる

えーと、久しぶりにこのブログのメインテーマ(だったはず)な話題を。

プロフィールにも書いてあるのですが、3年前にこここんな文章を書きなぐっていた時期がありました。ほんとに最後の方は書きなぐりで誤字脱字も酷いし、そろそろ内容を見直し&追記しようかなぁと思っていたところに、竹添さんのツイート経由でこんなエントリを見つけたのでした。

ご覧の様にコメント欄がプチ炎上状態です。まぁコメント内容を読むと炎上して当然かな?と言う内容があったりするのですが、そういった部分には触れず、このエントリを見る以前から思っていた事をこのエントリとコメントからの内容もふまえた上で書いてみようかなと思います。

「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。

これは業務アプリケーション実装の末端部分では結構当たり前だったりします。もちろん、自前で再利用性を考えて様々なクラスを作って使っている方も居ますが、大抵はこのエントリでも述べられているように、「.NET Framework」で提供された便利なクラス群を組み合わせて所定の処理(ロジック)を実現するケースが多いと思います。そして、大抵のロジックはこんな作りだったりします。

  1. メソッドの引数あるいは他の仕組みから、処理結果のデータをもらうために必要なデータ(パラメータ)をもらう
  2. 必要ならパラメータを加工(場合によってはパラメータの検証(バリデーション)も行うケースがあるかも)
  3. 結果として必要なデータをデータベースから得るための命令文(SQL)を生成(ここで1〜2で出てきたパラメータも使用)
  4. データベースに接続&SQLを実行してもらって結果をもらう
  5. もらった結果を(必要であれば加工して)画面に表示(あるいは結果によって画面の表示を変えるなど)

このタイプのロジック、私は個人的に「SQL一発」ロジックと呼んでいます。その理由として、上記における3.の「SQL生成」が最重要であると言うところからです。ほとんどの場合、ここを間違えさえしなければそのロジックは正しく動きます。だから必死でこの部分をどう実現するか考えるわけです(場合によってはここでかなりの時間を要します)。当然、4.以降の処理も大事ではありますが、3.で間違いがあるようでは元も子もありません。

それで、4.以降の処理と言うのはもっとも単純なケースでは「結果を画面に表示するだけ」の処理になります。イメージとしては「データの移し替え」で、プログラミングの世界ではいわゆる「代入」です。ここにオブジェクト指向の出番と言うか、メリットはあまりありません。

じゃぁ、どこにメリットがあるのか?冒頭の引用で「オブジェクト指向っぽいことをするなんてことはまったくない」と書いてあるように、そもそも入り込む余地は無いのです(ちょっと大げさに言ってます。実際は入り込む余地は十二分にありますがね)。

言い換えると、上記に記載の1〜5の処理のどこかでそのメリットと競合する部分があり、その部分でカバーされているので「オブジェクト指向っぽいことをする」必要が無いと言う事なのです。それはどこか?はい、それが3.の「SQL生成」処理にあたるのです。件のエントリの著者の方のコメントにも

どのようなSQL文を書くか決まれば、もう内部設計が終わったようなものです。

と言うものがありますね。このスタイルで仕事をこなす事にすっかり慣れ親しんでしまった人にとって、これで十分に目的が達成できている訳ですから「オブジェクト指向プログラミングを自らが行う事によるメリット」と言うのは感じづらいモノになるのは自然だと思っています。

とは言えこの業界、外部から情報を収集していると「やっぱ、オブジェクト指向を自ら取り入れた方がいいのかな?」と思うケースもあるんじゃないかなと思っています(そうあって欲しいなぁ…)。ま、そこはそこでまた別の要因が絡んだりしてすんなりと行かない事が多いようです。

と書いたところで少し長くなったので、続きはまた後日。

| | コメント (3) | トラックバック (0)

2010年5月 1日 (土曜日)

Bluetoothヘッドホンを買ってみた

先日、Bluetooth対応のヘッドホンを購入しました。バッファローコクヨサプライのBSHSBE06という製品です。

ここ数年、普段PCを使用している時は耳掛けタイプのヘッドホンを使用しているのですが、片付ける時に面倒なのと、使うときにほぼ必ずと言っていいほど絡まってしまうコードとの格闘がちょっと苦痛だったので、「無線化したいなー」と常々思っていたのをようやく実現したと言う流れです。

製品はそれこそ、電話用のモノラルタイプも含めればたくさんありすぎて選べない状態でしたが、

  • 値段の手頃さ
  • ヘッドホン交換可能なユニットタイプ
  • USB充電対応
  • マイク内蔵で電話にも使える

あたりを決め手にしました。あ、後はブログとか検索してMacで動作OKiPhoneで動作OKなヤツってこと。
ちなみにコンセント充電器の付属有無で型番が異なります。差額がたいした事なかったので迷わず充電器ありを選択。

届いて早速iPhoneで使ってみました。調べている時点では「音質は正直期待できない」というモノが多かったですが、個人的には「全く問題無し」と言うのが正直な感想(ちなみにiPhoneで普段使用しているのは2000円前後のカナルタイプヘッドホン)。本体との間に障害物があったりすると稀にノイズが入る時もありますが、「だって無線だもんね」と十分に妥協できるレベル。

電波の到達距離も壁等を隔てない限りは4,5mは余裕です(つーか、それ以上は屋外にでも出ないと実験できない)。さすがに壁を隔てると途切れ気味になり、欠損&遅延分をシンクロさせようとテンポがズレたりします。

あ、あとは踏切なんかだと電車の通過時にノイズが入りますね。そして電子レンジは干渉しまくるwんだろうけどまだ試してません。

iPhoneで試した後は、手持ちのネットブック(XP)、MacBook(MacOSX/Vista)、iPod touch(2nd gen.)でも検証。ネットブックは若干設定で悩んだものの音質は良好。逆にMacBook(MacOSX)はサクっと設定できたものの、音質はイマイチ。明らかに気になるデジタルノイズが乗ります。一番メインで使おうと思っていた環境だけに少し残念。

そしてMacBook(Vista)も一悶着で、「セットアップできるけど音出ない」状態。最初「VistaはA2DP非対応?」とか思いましたが、ようやらBootCamp上での問題の様で、正規のドライバが現状では無いとのこと。紹介されている回避策はライセンス上NGでしょうから自己責任でお願いします。

とまぁ、結局メインで使いたかった環境において音質がイマイチだったと言う少し悲しい結論wで、もっぱらiPhoneとiPod touchで使ってます。仕事の関係上、ここ数ヶ月は電車通勤メインなのですが、iPhoneとヘッドホンを離していても使えるのはスマートで良い感じです(当然ですが、iPhoneのバッテリーの持ちは格段に悪くなります)。

デザインとUIは価格相応かなと思います。クリップで衣服に留めようとする時に間違って前面にあるBluetoothアイコンのボタンを押してしまう時があります。

また、曲送り/戻しの機能がありますが、iPhone/iPodで使えるのは再生/停止/一時停止/音量だけです(他のBluetooth対応携帯だと出来るようですが)。あと、説明書には書いてませんが、バッテリー残量が少なくなると一定周期で「ポーン、ポーン、ポーン」という音が鳴ります。

| | コメント (0) | トラックバック (0)

« 2010年4月 | トップページ | 2010年9月 »