まどかの 日記

[2004/02/09〜2004/02/15の日記]
[2004/02/16〜2004/02/22の日記]
[2004/02/23〜2004/02/29の日記]
[2004/03/01〜2004/03/07の日記]
[2004/03/08〜2004/03/14の日記]
[2004/03/15〜2004/03/21の日記]
[2004/03/22〜2004/03/28の日記]
[2004/03/29〜2004/04/04の日記]
[2004/04/05〜2004/04/11の日記]
[2004/04/12〜2004/04/18の日記]
[2004/04/19〜2004/04/25の日記]
[2004/04/26〜2004/05/02の日記]
[2004/05/03〜2004/05/09の日記]
[2004/05/10〜2004/05/16の日記]
[2004/05/16〜2004/05/23の日記]
↑過去3ヶ月くらいの日記はこちら↑

まどかは「P/ECE Hand Book」を応援しています


0959
2004/05/30()
 LED光らせて遊んでます(^^
 えー、今日は昨日作ったH8/3964F基板用のマザーボードの動作チェックを兼ねて、H8の開発環境をインストールし、とりあえずモニタプログラム(シリアル通信によりH8内の色々な制御やメモリ内容の確認・編集等が行える便利なプログラム)をフラッシュROMに書き込んで、通信テスト。
 ちょっとモニタプログラムの書き込みで戸惑いましたが、書き込みも成功し、通信確認。
 (なぜか書き込みツールFDTはシンプルモードにしないと上手く書き込めません(^^;)

 なんと一発でちゃんと動いてしまいました。……この程度の回路なら動いて当然かと思われるでしょうが、結構こういう単純な回路でもいざ組んでみると、間違いって意外にあるものなんですよ…… って、そんなに失敗するのは私くらいか(^^;

 というわけで、動作テストも終了し、簡単なサンプルプログラムを実行させるため、動作確認用のLEDを汎用入出力ポートのP81とP82に接続。

 ちなみに、H8の汎用入出力ポートは、通常そんなに電流が流せられるわけではなく、H8のマニュアルの電気的特性のDC特性という項目のところにある表で見ると、IOH(Highレベル出力時の電流)やIOL(Lowレベル出力時の電流)がほとんどのポートで0.1mAとか1.6mAとかで、これだとLEDを光らせることはできませんね。(LEDを光らせようと思ったら8mAくらいは最低欲しい)

 で、今回使用したP81とP82はH8/3694Fのポートの中でも10mA以上の電流を流すことができる限られたポートのひとつなので、このポートにLEDをつなげば、LEDを光らせることができます。
 もし、他のポートでLEDを光らせようと思ったら、トランジスタを使ってポートをベースとつなげればベース電流は極わずかでも良いため、LEDを光らせることができます。この辺のお話は、トランジスタを解説している書籍やサイトを参考にして下さい。

 ちょっと話がそれてしまいましたが、私がやったサンプルはトラ技の2004年4月号に載っているサンプルそのままなので、詳しい話は本に任せるとして、実際に動かしてみたのが以下の写真です。

 
 ものすごくわかりにくいですが、電源用LEDの下に2つ並んでいるLEDの右側のLEDが光ってます(^^;
 動作的には、一定の間隔で2つのLEDが交互に点滅するだけのものです。

 H8でプログラムを動作させるには、FDTなどの書き込みツールでフラッシュROMに書き込む必要があるのですが、P/ECEのフラッシュメモリ同様、フラッシュROMは書き換え回数に制限があるため、デバッグ等でちょっとプログラムを書き換える度にいちいちフラッシュROMに書き込んでいたのではもったいないので、P/ECEでのsrfをSRAMに直接読み込んで実行させる様な感じでH8上のRAM領域にプログラムをロードして実行させる方法があります。

 RAM上で実行させるには、P/ECEのカーネルみたいにROM上に先述のモニタプログラムを書き込んでおき、オフィシャルのモニタプログラム用通信ソフトである「HTerm」を使って、プログラムをRAM上にロードし、モニタからRAM上のプログラムを実行させます。

 ただ、RAM上で実行させるには、リンク時の配置情報をRAM上になるように設定しないといけないので、そこら辺のことはトラ技の解説を参考にしてください。また、H8/3694FのRAMは2KBしかないので、必然的に動作可能なプログラム容量も2KB未満になります。

 ちなみに、モニタプログラムと専用通信ソフトのHTermはここからDLできるようですが、モニタプログラムの方が、使用するH8用にコンパイルしないとだめなようで、コンパイルするためには、ルネサスのHPから無償版コンパイラであるHEW2をDLしないといけないとか、結構面倒なようです。

 これらの作業が面倒な方は、なんとかしてトラ技を探した方がよいですね。

 トラ技を探しても、トラ技に付録で付いてくるHEW3は評価版で、今年の9月末(4月号のは6/13まで)で試用期限が過ぎてしまうので、今のうちに代わりとなる開発環境を探さないといけません。

 一応候補として、トラ技の2004年5月号で取り上げられている、gccとcygwinを使った開発環境があげられますが、cygwinの環境等が良く分からない方には、ロボット関連になってしまいますが、ベストテクノロジー社GCC Developer Liteが良さげな感じです。

 まだ実際に試してはいないので、詳細はわかりませんが、GCC Developer LiteはWindows用のgccを利用する開発環境のセットらしいです。最近トラ技付録で使われているH8/3694Fにも対応したようなので、使えそうですね。

 と、ベストテクノロジー社の商品一覧を覗いてみると、H8/3694Fを使ったマイコンボードのセットがあるじゃないですか。
 えっと、値段は5000円で、サンハヤトの基板よりも倍以上しますが、その分、基板自体に今回マザーボードの方に取り付けたRS232Cのレベル変換ICや、ブートモード/ユーザーモード切替スイッチにリセットスイッチなどが実装されており、通信用のピンの接続もコネクタが取り付けやすいようになっていて、実はこれの方が使いやすいんじゃないのかなぁ(^^;
 なんか良いの見つけた(^^
 先述のGCC Developer Liteも当然ついてくるし、小さいし、配線も便利そうだし、うん。
 とりあえずH8の勉強はトラ技の付録基板を使って、実際にちゃんとした作品を作る場合は、このベストテクノロジー社のマイコンボードを使おうかなぁ。

 というところで、今日はおしまい。
 今回のマザーボード製作用に使ったRS232Cのレベル変換ICはP/ECEでも使えるように3.3Vでも動作するADM3202ANを余分に買ってきたので、そのうちnsawaさんの真似してシリアル通信用の拡張端子基板でも作ろうかな(^^

 明日からはまた仮称エスパーな仕事をがんばります。
 それでは、おやすみなさーい。

0958
2004/05/29()
 トラ技付録H8用の部品を揃えてきました(^^
 はい、今日は天気予報では雨降りの予定だったので、お出掛けには傘を持っていったのですが、結局雨は降らなくて良い一日でした。

 今日はまず近所のカラオケに行って2時間熱唱し、その後ちょっと足を伸ばして、西区にある名古屋の駄菓子問屋街を目指し、その近くのちりめん亭というラーメン屋で昼食。そして駄菓子を物色(^^

 それから大須に向かって、トラ技のH8基板を動作させるためのマザーボード用の部品(ここ参照)を第2アメ横で揃えて、先週買ったスーツを取りに行きました。
 で、最後に99円ショップによって帰宅。

 帰ってからは、早速トラ技付録のH8基板(H8/3694F)を動作させるためのマザーボード製作に取り掛かりました。
 ちなみに、マザーボードの回路はトラ技2004年4月号のP.134に載っているものは間違いで、正しくは、トラ技のHPFAQにあるFAQ1を参照してください。
 このFAQはH8の勉強の予習をしようと思っていろいろ調べていた時にたまたま見つけたもので、ほんと、運が良かったと思います(^^; これを知らずに本を見ながら作っていたら、いきなり動かなくて泣いていたところです(笑)

 というわけで、作業進捗を写真で簡単に紹介します。

 
 これがトラ技2004年4月号に付録で付いて来たH8/3694F基板です。
 ちなみにこれと互換でちょっとだけ改良されている基板がサンハヤトから発売されています。
 
 
 ピンヘッダをつけてみました。

 
 製作したマザーボード(とりあえずPCとの通信機能だけを備えたもの)はこんな感じです。

 
 DSub9pinのコネクタ実装には、サンハヤトのCK-10という変換基板を使用しました。
 通常基板実装型のDSub9pinのコネクタは、ピンがユニバーサル基板の2.54mmピッチに合わない配置で作られているため、ユニバーサル基板にはこのような変換基板を使って実装するのが便利です。ちょっと高いけどね(^^; 

 ちなみに、マザーボード右上にあるACアダプタ用のDCジャックコネクタもCK-23という変換基板を利用して実装しています。

 
 マザーボードに電源を供給し、スイッチをONにすると、電源LEDが光ります。
 まだ、これだけです(^^;

 
 ちょっと写真が暗いですが、H8基板を付けたらこんな感じになります。
 左や下のスペースには今後キャラクタディスプレイやその他周辺機器を増設していく予定です(^^
 ちなみに、ACアダプタは安定化電源と書かれた5Vのモノを使用しているので、7805等は使ってません。

 とりあえず今日のところは、ここまで作っておしまい。と、言いつつ、かなり遅くまで粘って作ってましたが(^^;
 明日は、トラ技のCDに入っている開発環境をインストールして、いよいよ動作チェックに入ります。

 それでは、おやすみなさーい。

0957
2004/05/28()
 メモリ使用量のダイエットに成功(^^
 えー、今日は昨日から悩んでいたメモリ問題を引き続き悩んでいました。

 で、結局メモリが予想以上に消費されている原因はDIBセクションにあることが分かりました。
 今回はインジケータやボタン等のコントロールを大量に並べて制御することから、なるべくWindowメッセージやWindow資源を節約しようと、自前でコントロールを作成して管理し、ボタン等のイメージはDIBセクションを作ってコントロールのクラスで管理しています。

 が、DIBセクションはGDIオブジェクトであるので、数千個作るとGDIリソースが足りなくなってしまいます。なので、必要なイメージデータは一部ピクセルデータの配列として管理し…… って、こんな細かい話はとりあえず置いておいて、問題はDIBセクションが確保するメモリ量です。

 CreateDIBSection APIでビットマップをDIBセクションとして作成すると、Windowsはメモリ上にピクセルデータを管理する領域を確保します。これは、Windows側が管理するので、プログラマが位置を指定できる領域ではありません。
 
 で、通常はその確保された領域のポインタがもらえるので、そのポインタが指すアドレスに色んなことをしてピクセルデータをいじります。

 さて、ここからが本題ですが、普通に考えるとこちらが指定したサイズ分だけの領域を確保してくれるものだと思いますが、実はWindowsが確保するDIB用の領域には下限が存在し、確認はまだとれていませんが、4KB以下になるサイズ指定を指定した場合でも確保されるのは4KBになってしまいます。

 例えば、24bitDIBで32*32の領域を確保した場合、32*3*32=3072bytesですが、確保されるのは4KB程で、さらに24bitDIBを16*16で作った場合、16*3*16=768bytesになるはずが、やはり4KB程確保されてしまいます。
 というわけで、細かい境界はまだ調査し切れていませんが、DIBセクションは小さく取れば取るほどメモリの使用効率が落ちるようです。

 今回のシステムの場合、30*13程のインジケータが画面に最大1200個ほど並ぶのですが、これらのインジケータのイメージをDIBセクションで普通に持って置くのは効率が悪いということが分かりました。

 今までこんなに小さなサイズでDIBセクションを作ったことがなかったため、全然気が付きませんでしたが、何かの制約で4KB単位とかになっているのでしょうか(^^;

 ということで、昨日まで800MBだったメモリ使用量が色々工夫して頑張った末、30MBまでダイエットに成功しました(^^ まだまだ改善の余地はあるので、さらに減らせる予定。

 そんなこんなで、今日はキリをつけて帰宅。

 明日は嫁さんとカラオケ行ったり、駄菓子問屋に足を伸ばしたり、大須に行ったり、この前買ったスーツを取りに行ったりする予定で、そろそろトラ技についてきたH8基板を使ってH8の勉強をはじめようかと思っているので、それ用の部品を買いに行く予定です。

 それでは、おやすみなさーい。

0956
2004/05/27()
 大容量メモリ時代の弊害か!? なんてね(^^;
 えー、今日は一応仮称エスパーな仕事の第一回社内期限の日なんですが、ちょっと間に合いませんでした(j−j

 間に合わなかったどころか、超デキル社員さんにメモリ使用量について指摘され、今までは、今回のシステム特有の独自表示機構を完成させるのに精一杯で、メモリの使用量については全然気にせずやってきてしまったのですが、気が付くと、800MBもひとつのアプリで使用していることに気付きました(^^;

 これだけ使用しているので、起動時には確実にスワップが発生し、非常に時間がかかります。当たり前ですね(^^;
 で、今日からメモリ使用量のダイエットを始めたのですが、どうも自分で確保した量を全部足してもタスクマネージャのプロセスタブで表示されている量には全然至らず、計算が合いません。なぜ?

 なので、色々試してみたのですが、結局今日は原因が分からずじまいで、続きは明日にすることにしました。
 当然、キリが付くまでやっていたので、今日も遅いです。

 こういうメモリ使用量の問題は、昔はPC自体のメモリが少ないので、必然的にメモリ使用量を気していましたが、現在は大容量のメモリを搭載してて、さらに仮想記憶のシステムのおかげで、全然気にすることなく(いや、気にしないといけないんですけどね(^^;)プログラムが組めてしまいます。

 こういうミスを犯してしまうと、私もだめになってしまっているなと反省します。昔はMSXの限りあるメモリ空間をいかに有効に使うかで色々工夫をしたものです。
 なんか変な話ですが、MSXやP/ECEの様に限られたメモリの中でどれだけやれるかということを頑張る方が私は好きです(^^; っていうか、むしろそういう環境の方が燃えます(笑) 

 明日はなんとかこの問題を解決したいです。
 それでは、おやすみなさーい。

0955
2004/05/26()
 半徹夜でちょびっと辛い模様(j−j
 昨日からの半徹夜でちょっぴりお疲れモードです(^^;

 ようやく新人K君も今回の仕事のコツをつかんだのか、少しずつ前に進めるようになりました。
 というわけで、今日は早めに帰ろうかと思っていたのですが、結局仮称エスパーな仕事の開発がキリの良いところまでいかず、遅くに家に帰りました。
 
 家に帰ってからは、何もせず寝ました。
 明日が一応約束の日ですが、間に合っていません(j−j 一応見せることは出来る状態ですが。

 それでは、おやすみなさーい。

0954
2004/05/25()
 かなりしんどくなってきた模様(j−j
 昨日から急に切羽詰ってきた仮称エスパーな仕事ですが、それ関連で社長から新人のK君にある仕事をやらせてくれと言われて、私が一応監督で新人K君にその仕事をやってもらったのですが、思いのほか新人K君の出来が遅いので、ちょっと焦ってます(--;

 というようなことをやってて、結局帰ったのは4時半。今日も遅くなってしまったので、家に帰っても何もなし。
 明日も切羽詰る予定です(j−j
 それでは、おやすみなさーい。

0953
2004/05/24()
 切羽詰ってきました(j−j
 えー、今日は1日仮称エスパーな仕事をやっていました。
 今日になって先週まで悩んでいたバグが全て解消し、思ったとおりのものができて大満足(^^
 でも、今週の木曜日までにあるところまで完成させて欲しいとの社長からの急な指令が下り、急遽切羽詰った状態に変貌。うう(j−j

 その後は、新人K君との打ち合わせや社長との打ち合わせとかなんだで、結局日付が変わるまで帰れなかったり(j−j

 話は変わりまして、本日アクアプラスの川上様からMMC対応カーネル改造でのカーネルソース再配布の許可メールを頂きました(^^ ありがとうございます。これで心置きなく公開ができます。

 で、今日は遅いので、川上様にお礼のメールを返信しておしまい。
 明日からは仮称エスパーな仕事を今まで以上に気合を入れて頑張ります。

 それでは、おやすみなさーい。