goo blog サービス終了のお知らせ 

組み込まれたエンジニア

我輩は石である。名前はまだ無い。

どんどん深みにはまっていく気がする・・

2005-07-31 21:50:31 | 組込みシステム
家のマシンで確認したところ、子プロセスで動いたRxvtが強制終了させられると
親のバッチファイルまでシグナルが飛んでくるので、結局バッチファイルを
終了するかの確認が入ってうまくない。

そこで、Rxvtからのシグナルを読み捨てるプログラムをC言語で別に作成し、
このプログラムからRxvtを起動するようにした。

一応、これでほぼ満足行く動作をしているのだが、最小化したコマンドプロンプトを
わざわざ開いて中断されるとやっぱりだめである。
DOSの時代にはBREAKというコマンドが動作したのであるが、NT以降のWindowsでは
これは動かないので、コマンドプロンプトを保護する方法がない(と思う)

Windowsにはsigaction関数がないので、POSIXにないsignal関数を使わされるのも
なんだか気持ち悪い・・

それでも、このくらいにしておかないと、いくら時間をかけても
所詮Windowsである。納得行く結論にはなりにくい気がする。

もちろん、startコマンドを使おうとはしたのだが、ネストされたstartの
挙動はどうもおかしく、思った形にはならなかった。

コマンドプロンプトを最小化状態で実行

2005-07-31 18:54:54 | 組込みシステム
というのは、WindowsXPやWindows2000では直接はできないのだが、
ショートカットを作るとそのプロパティの設定で可能となる。

そこで、先の件の対策として有望なのは、触らせなくないBATコマンドは
最小化状態で起動し、その中からCygwinのRxvtを呼び出して、ユーザには
Rxvtだけを触らせるというもの。

これだと、Rxvtを強制終了してもBATコマンド自体は動いているため
「きっと」大丈夫な気がする(笑)

ここ4日間は作業はできないので、しばらく確認は難しいが、この方針で
いくつかテストを始めてみよう。


コマンドプロンプトを強制終了させられる

2005-07-31 10:28:35 | 組込みシステム
CDROMのドアロックをして安心と思っていたら、
そうではなかったらしい。
彼らは、コマンドプロンプトのウィンドウを強制終了するので、
ドアロックの解除がされず、CDが取り出せなくなると騒いでいる。

だから、シェルを正常終了させない限りだめだって・・

コマンドプロンプトの強制終了禁止のツールなんてあるのかしらん?

GPS情報

2005-07-31 07:21:15 | モバイル
昨日日本橋で試したところ、その場所では衛星は見えていたはずなのに
GPSの位置情報は取得できなかった。
やはり、Hamana-1の場合と同じく補足まで数10分かかることがあるのか?
と思い、家に帰って試してみたら、やっぱりすぐには衛星を捕捉しない。

補足しないのはいいのだけれど、捕捉するまで直前に捕捉した場所を
ずっと示し続けるから、まずい場所にいたりすると、バレバレとなってしまう(笑)

ドアロックOK

2005-07-30 11:20:20 | 組込みシステム
やっぱり、ハンドルのクロースの問題だった。
UNIX系のOSではプロセスが終了時にはすべてのハンドルを
自動的にクロースすると思うのだが、Windowsでは違うのだろうか?

まぁ、何はともあれ良かった。

こんなことで悩むのは、LiveCDを途中で抜く奴がいるからなのだが、
身近に馬鹿なことを平気でするのがいると、問題が拡大する前に
対処できるから少しうれしいかもしれない(笑)

明日使うCDROMはとりあえず修正しておいた。
WEB上のは・・まぁ、使う人もいないだろうから放っておこう。

CDROMのドアロック again

2005-07-30 07:31:09 | 組込みシステム
IOCTL_STORAGE_MEDIA_REMOVALのIOCTLをドライブに送ると
何かしら制御できそうなのだが、やってみるとドライブをオープンした
ハンドルをもったプログラムからしか制御できない。
つまり、ロックしてプログラムを終了させると他のプログラムは
このドライブを制御できないみたい。

まだオープン時のパラメータなど色々試してみないと分からないところも
多いなぁ・・
単にハンドルをクロースすればいいのかしらん?

Windowsのプログラムは訳分からん


CDROMのドアロック

2005-07-29 10:01:25 | 組込みシステム
LinuxではCDROMをマウントすればドアが自動的にロックされる。
ところが、Windowsでは利用中のファイルがあろうとなかろうと
イジェクトボタンが押されると勝手にCDROMが取り出されてしまう。

LiveCygwinではバッチファイルをCDROM上で動作させているのだが、
CDROMが取り出されてしまうといかんともしがたい!

0xFE01, 0xFE00をCDROMに送ることができるインタフェースがあればいいだけなのだが・・


クライスラーとチボーのバイオリン

2005-07-29 06:20:37 | 音楽
クラシックの名曲を多く作曲したクライスラーであるが、なんといっても、
彼が自分で演奏した曲が残っているのがすばらしい。
クライスラー:愛奏曲集
クライスラー:自作自演集
どちらもぜひ聞きたいCDである。
実は、発注しているのだが、一緒に発注したチボーのCDが輸入版でなかなか入らず
いつまでたっても納品されない(笑)
チボーをあきらめるか、分割にするかしたほうがいいかもしれない・・
実は、その後、チボーのアルバムは高い輸入版以外にも
フランク、フォーレ&ドビュッシー : ヴァイオリン・ソナタ
出ていることを発見。
こちらは24時間以内に発送となっているので、こちらに乗り換え、前のを
キャンセルするか・・

POSIXスレッド

2005-07-29 05:20:20 | 組込みシステム
MDD教育用の資料を、MLに流したのだが、POSIXスレッドとシグナルを同時に使う
プログラムを自分では書いていなかったので、カーネル機能から推定して
記述をした部分があった。ところが、確認していない部分には「必ず」バグが
潜むものだ(笑)
Pthreadsプログラミングを読むと、シグナルはスレッドのうち、1つだけに
報告されるとある。カーネル本だと同一プロセスグループのすべてのスレッドに
報告されることになっているが、これだとシグナルはスレッド数分だけ発生するので
実際にはPthreads本が正しい。

再度、受講者に資料を送りなおすのも何なので、当日修正としよう。

測位実験続き

2005-07-28 22:31:00 | モバイル
図は、マップルの地図を最大に拡大して、その上に測位の履歴を表示したもの。
実は南のベランダにGPSを置いたのだが、測位のはじめではGPSからの出力は
北側の道路の向こうを指していた。
しばらくすると、衛星データで現在位置の修正が行われ、だんだん南に
下がってきたのだが、オーバーシュートして南にいきすぎ。
その後、また少しずつ戻ってきた。

GPSは衛星からの電波を用いて計算から場所を求めるから、このような動作になる。
北側は建物の影に隠れて衛星はほとんど捕捉できていない状況で、実用上問題ない
程度の時間で場所を特定できるのはやっぱり便利だ。

GPSは乾電池で12時間持つそうだからいいとして、車で利用するには
パソコンのバッテリーが問題になるね。
やっぱり、インバータも必要になるのだろうか・・

(だんだんオモチャが増えると思っているでしょ?)

Bluetooth接続GPSでの測位実験

2005-07-28 22:25:22 | モバイル
BluetoothアダプタとソニーのBluetooth接続GPS(GU-BT1)を用いて、
SuperMappleDigital Ver.6で測位の実験をした。
GPSはベランダの手摺に乗せて、PCは部屋の中。
Bluetooth接続なので、こういった使い方は平気でできるのがうれしい。
(風があったら危ないけどね)

測位結果も図を出そうとしたら、ここのブログは画像1つだけなのかな?
図を示すための、記事をもうひとつ書くか・・

スケジュール管理は難しい

2005-07-28 08:33:47 | モバイル
Zaurusに記載していなかった予定がある日にバイオリンのレッスンを入れてしまった。
時間的にはレッスン後に移動でもぎりぎり間に合うのだけれど、食事をする時間も
なくなるから、やっぱりレッスンを移動してもらうしかないか・・

普段は忘れずZaurusに記帳していたのだが、うっかり忘れるとこういうことになる。

某センターの校正のように、期間指定の予定も記帳していないので、
いつも気にしていないと、うっかり期間が過ぎたりする。

やっぱり、秘書を雇えるくらいの収入がないと、この性格では社会生活が
困難かもしれない

CPUのシミュレーション

2005-07-27 22:00:23 | 組込みシステム
VerilatorでCPU(SN/X)のシミュレーションをすると、大きなプログラムは
ちゃんとVCDファイルを作って、波形表示ができるけれど、小さなプログラムは
何も波形が出力されないという事象が発生していた。

色々考えても分からないので、Verilatorの作者にメールしてデバッグを
お願いしようと考え、VerilogファイルとテストベクターのC++ファイルを
送ったが、ふと思いついて、チェックしてみると、やはり自分のテストベクターに
問題があるような気がして、修正したら問題点が解消した。
作者にはお詫びのメールを送っておいた。

問題は何かというと、ダンプファイルはあるクラスのインスタンスが
作成とファイルへの吐き出しを担当しているのだが、クラスインスタンスの
ディストラクタが呼ばれるとバッファされているトレースデータを吐かずに
そのままお亡くなりになる。
そこで、ディストラクタが起動される前に明示的にcloseを呼び出すようにしたら、
ちゃんと動くではないか。
本来はディストラクタで開いているファイルがあれば閉じるのが普通の実装だと
思うけれど、そこまで要求する必要はないので、とりあえずは自分のスクリプトを
修正することとした。

本来はどっちがいいんだろうね?