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

組み込まれたエンジニア

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

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

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

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

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

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


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

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

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

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

ドアロック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に送ることができるインタフェースがあればいいだけなのだが・・


POSIXスレッド

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

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

CPUのシミュレーション

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

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

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

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

LiveCygwinでのVerilog->Cコンバータ

2005-07-27 13:20:27 | 組込みシステム
いくつかファイルを追加するだけで、Verilatorは問題なく動作した。
もちろん、GTKWAVEによる波形表示を含めて問題なさそう。

気になるのは、Cygwinのシンボリックリンクのリンク先なのであるが、
リンクファイルの中に何が書かれているかを確認していないが、
今のところ問題なく動作しているようだ。

パルテノン講習会での配布資料として、Verilatorも含めた環境を配布予定。

PS: パルテノン講習会は第10回以降はPARTHENONではなく、カタカナのパルテノンに変更になっているのだが、WEB担当は未だにPARTHENON講習会と書いているなぁ。
連絡しておかないと・・

VerilogからCへのコンバータ(Verilator)

2005-07-24 23:26:42 | 組込みシステム
しばらくホームページを見ないうちに開発者が二人も増えて、
強烈にアクティブに開発が進んでいる。
もともと強力なツールなのであるが、バグフィックスのペースが上がり、
VCDへのダンプ機能やらシステム関数やらサポートされるものが増えて便利になってきた。

CygwinへのVerilatorインストール備忘録

VerilogPerl
SystemPerl

のパッケージを先にインストールすること。

このとき、LIB環境変数にVisualC++のものが設定されていると失敗する。
export LIB=
で環境変数をクリアしておく。

次に、私の環境ではVerilogPerlがlibstdc++.aを見つけられなかった。
ln -s /lib/gcc/i686-pc-cygwin/libstdc++.a /lib
として、シンボリックリンクを張る。

Verilatorのパッケージを展開して、
./configure --prefix=/usr/local/verilator
make;make test
で(SystemCは入れていないので)SystemC以外のテストが通ればOK。

make install

でインストールするが、この時にコピー忘れが発生していて、このままでは
動作しないので、

mkdir /usr/local/verilator/include
install -c include/* /usr/local/verilator/include
install -c bin/verilator_* /usr/local/verilator/bin
install -c verilator_* /usr/local/verilator

として、手動でコピーする。
export VERILATOR_ROOT=/usr/local/verilator
とすることで、

verilator --cc test.v

がコンパイルできるようになる。

sfl2vlが変換したVerilogファイルはほぼ問題なく変換できるので、便利である。

次のファイルをtest.sflとして用意する。

module test {
input a;
output f;
f=^a;
}

これをsfl2vlで変換した test.vを用いて、次のテストスクリプトとともに
コンパイルする。

#include <verilated.cpp>
#include "Vtest.h"

Vtest *test;

int main() {
int i;
test = new Vtest;
for(i=0;i<10;i++) { test->a = i&1;
test->eval();
printf("a=%x, f=%xn", test->a, test->f);
}
}

すると、その結果は
$ ./test_main
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0

のようになる。
Verilatorを用いているから当たり前のことだが、論理回路を自由にC言語でテストできるようになる。

verilatorのオプションに--traceをつけると、VCDファイルを作成できる。
これで、GTKWAVEの波形を表示可能である。

LiveCygwinのダウンロード

2005-07-24 01:07:27 | 組込みシステム
興味を持った方が試せるように、WEBにダウンロード用のアーカイブを置いた。
LiveCygwin.zipをダウンロードし、
中にあるISOファイルをCD作成ツールでCDROMに焼くとLiveCygwinCDROMの出来上がりである。

「usage.txt」には日本語で説明が、
「このCDROMの使い方」には英語で説明が書かれているのはご愛嬌(笑)

MLCADとLDRAW

2005-07-24 01:04:04 | 組込みシステム
LEGOのブロックを用いたマシンを作るのに、MLCADという3次元CADを利用している。
LiveCygwinにMLCADを収録するにはどうしたらよいかと考えていたが、思うより簡単で
インストールしたディレクトリごとCDに焼いてしまうと、そのままCDROMから
実行できたのであった。

これでほぼETロボコンの開発環境は完璧といってもいいかもしれない。
(あとは、IRタワーのUSBドライバだけだ)

ついでに、ルネサスのM16のツールも同じようにCDから直接実行できないかと
考えていたが、こちらは、バイナリのディレクトリにログと構成ファイルを
書き込む仕様になっていてROM(もしくは読み込み専用)のフォルダからは
実行できないのであった。
うまく書き換え可能な部分を他に出せればいいのだが・・・

UDPのパケット長

2005-07-22 21:21:59 | 組込みシステム
結局、昨日の不具合はオーバーサイズパケットに対する振る舞いが
いろいろと異なることが原因らしいと判明。
といっても、きちんと原因が解明できているわけではないが、フラグの違いが
関係しているらしい。
パケットサイズを小さくしたら、問題なく動作するようになった。

ネットワークプログラム

2005-07-21 20:56:56 | 組込みシステム
ずいぶん久しぶりにソケットを用いたネットワークプログラムを行った。
といっても、ほんの小さなサンプルコードだけだけれど。

MPIが出るずいぶん前にワークステーションのネットワークを直接プログラムして
並列処理をしていたのだが、ここ10年ほどはPVM/MPIばかり使っていて、すっかり
勘も失われていた。

ところで、Linuxでは正常に動作するのだが、Cygwinに同じものを持っていくと
Windowsにブロックされる。WindowsXP SP2は困ったやつだ・・

どうしたものやら。

Linux組込みプログラミング?

2005-07-21 07:12:33 | 組込みシステム
打ち合わせではLinuxとだけ書かれていた私の担当部分は、
いつの間にかLinux組込みプログラミングになっているらしい。

組込みプログラミングといわれたら、デバイスドライバや割り込みハンドラなどの
話をしたくなるではないか。
でも、今回のチャレンジャーはそんなところは必要ないはずだ。
90分の中に、デバイスドライバや時間スケジューリングの話まで入れたら
きっと聞いているほうは詰め込みすぎで理解不能だろうなぁ。

私としては、そのほうが話はしやすいのではあるが、本当にこれでいいのだろうか・・