上へ

開発メモ

2002/05/31 OPUSER 2000 いまいち・・・

OPUSER 2000 が届いたので使ってみました。
立派な箱にスカスカ状態で EDWin2000 の CDと OPUSER2000 アップデート CD-R英語のスタートアップガイドが入っていました。 EDWin をインストールしてから OPUSER アップデートを当てる手順でした。
EDWin と OPUSER の違いは
  • 言語設定を日本語にしてもメニューが化けなくなる
  • チュートリアルが日本語になる
  • 日本向けのライブラリ部品(1S1588,PS2501,...)が少し増える
  • 日本語で発注できる。輸入処理不要。
のようです。これだけで EDWin より5割増しの値段はちょっと高いような気もしました。

操作感は慣れだけの問題かもしれませんが、私にとっては、グループに対する操作が面倒、 パーツ選択が面倒(マウスを慎重にあわる必要あり)ネットの接続、分断が面倒、 たまに飛ぶ、画面スクロールできない?操作を選んでから対象を選ぶ操作系に馴染めない、 といまいちでした。

低価格統合 CAD というメリットは捨てがたいものの、OrCAD の代替にはならなそうなので、 この CAD の習得に時間をかけてもいいものか悩み中です。 一番いいのは、作者の好きなBschに 基板レイアウト、NCデータ出力、オートルータ、機能をつけることなんだろうけど ・・・そんな時間も実力もないし。

2002/05/26 ブルガリア

現在基板の設計をしています。通常基板を起こすと初期費用10万くらいかかり、 1品ものが多い作者の場合なかなか手が出ませんでした。そんなわけで、あまり そっち方面の環境整備をしてこなかったので、調査することに。

ブルガリアの基板製作会社olimex(ファンページ) がどうもその筋では有名らしい。100x160mm(面付け自由)両面スルーホール基板が$26+$8(送料)。 4個取りすれば1個約千円!

発注には通常の基板発注と同じようにガーバデータとNCドリルデータ、 またはeagle の brd データが必要らしい。 今まで OrCAD の基本機能のみで設計していてガーバデータを作れる環境を整えていなかった のと(いや滅多に作らないし(^^;)、 OrCAD も最近は機能が増えずに、バグが増えて、値段が増えて、ライセンス制約が増えていく 傾向があるので、ネット、レイアウト連動、出来ればオートルート機能付きの CAD を探してみました。

フリーでは eagle 100x80mm制限版だけ(ライセンス上商用利用するには+$49)、 製品ではOPUSER2000が現実的という状況らしい。
(移植元と思われるEDWin XP/2000は $299〜$499 なので、日本語コメント機能が必要ない場合は EDWin XP/2000 を買うという手もある かも知れません)←業務用を含めると $299 〜 $3000 でした。

eagle を使ってみた感想
  • 日本語環境のせいか動作が不安定。
  • ユーザーインターフェースが独特。
  • 開発元がドイツのためか、ライブラリのラインナップがいまいち作者の環境とズレている。 実使用には整備が必要。OrCAD インターフェースはあるらしい。
  • ネットリスト、パーツリストなど一通り別プログラムでそろっている。
  • オートルータ、作者程度の使用には快適
フリー唯一のオートルート機能付き CAD、olimex に送れる、 不安定さ、ユーザーインターフェースは慣れる。ということで個人使用には十分。
仕事で使うには安定性と、ユーザーインターフェースの問題(人間側投資大)が致命的かも。

ちなみに他の OrCAD,P-CAD,Protel のレイアウト、オートルータ機能付きは作者では償却 できそうにない値段なのでパス。リーズナブルな価格設定で自作派には結構ファンの多い WinDraft,WinBoard もオートルータは Specctra で値段はのっていないけどどう考えても高いのでパス。

数個オーダー基板製作数だと OPUSER2000 で図面、部品表、ガーバデータ作成、 olimex で基板製作、部品手配実装はいつも通りというのが楽々環境になるのかな?

2002/05/15 linux環境設定(1)

中国導入の linux 設備。起動後1枚目のフロッピーしか認識しないと言われる。 マウントし直さなければそうなるのは当然なんだけど・・・中国のアルバイトの おねーちゃんがフロッピーを抜く前に "umount /mnt/floppy" とコマンドを打つ姿は想像できない(なにか間違っている)ので、抜け道を探す。
autofs を発見、Kylix のおまけについていた Laser5 linux 6.4(ftp版) の RPM をインストールしてみました。

設定ファイルの変更
[/etc/auto.master]
/mice		/etc/auto.misc	--timeout 1

[/etc/auto.mice]
...
floppy		-fstyle=auto,umask=0			:/dev/fd0
...
アンマウント方法は autofs プロセスに SIGUSR1 シグナルを送るなどの方法が 綺麗なようですが、単純にタイムアウトを1にしてしまいました。
デスクトップのフロッピーアイコンのリンク先を /mice/floppy にすると こんな感じでは使えるようになりました。
  1. フロッピーを入れる
  2. フロッピーアイコンをクリックする
  3. GNOME ファイルマネージャが立ち上がってフロッピーの内容を表示する
  4. コピー、削除など各種操作
  5. GNOME ファイルマネージャを終了させる
  6. フロッピーを抜く
別プログラムで /mnt/floppy を使っているとうまくいきませんが、これならまぁ良いでしょう。
追記、フロッピーへのコピーの場合に Operation not permitted となってしまうので、
floppy		-fstyle=auto,uid=[UID],user		:/dev/fd0
とする方が良いようです。 参考サイト

それにしても、よく我慢して使ってたな←おぃ。

2002/05/02 Kylixバグ

Kylix,Kylix2 例外関連バグ。try finally 文の仕様は

「生成された例外が finally で処理されない場合,その例外は try...finally 文を越えて伝わり,try 節で既に生成されている例外は失われます。したがって,ほかの例外の伝播の妨げにならないよう,ローカルに生成された例外はすべて finally 節で処理するようにしてください。」

ということになっていますが、実際にローカルに生成された例外を finally 節で処理しようとすると、 セグメンテーションフォールトが発生して、プログラムが落ちてしまいます。
try
  raise Exception.Create('');
finally
  try
    raise Exception.Create('');
  except
  end;         //ここでセグメンテーションフォールト
end;

言語仕様部分なので自力修正はあきらめていたのですが、
機械語レベルでは raise 文は System.pas の _RaiseExcept 関数呼び出し
に展開されていたため追跡することにしました。
例外処理の概要としては各スレッド毎に未処理例外を System.pas の ExceptionObjects に スタック形式で保存し、処理が終わった順に例外オブジェクトを開放しているようです。
言語仕様の「生成された例外が finally で処理されない場合・・・」の部分は
"finally 文中の例外を開放する時、我々はスタックをクリーンアップする、なぜなら 例外オブジェクトをリークしたくないからだ。"(超意訳)
というコメントと一緒に finally 文中の例外処理完了部分で未処理例外を全て開放していました。 この方針では finally 文中のローカルに生成された例外処理完了時にも 未処理例外を全て開放するため、実際に未処理例外があった場合は次の例外開放時に二重開放となって、 セグメンテーションフォールトが起こるようでした。
根本的には finally 文中の保護されない例外を開放する時にスタックをクリーンアップ するように直すべきなんでしょうが、読みきれなかったし、finally 文中で保護されない例外を 起こすこと自体が推奨されていないので、クリーンアップコードを無効にしてしまいました。

他にも例外処理ルーチンで使っている OSExceptionsBlocked フラグの動作に対象性がない (例外発生時に 1、例外処理完了時に 0 に戻らない)など、設計レベルであやしいところがあった ので、未処理例外が無くなった時点で OSExceptionsBlocked を 0 に戻すコードを入れてみました。

とりあえず動作していますが・・・副作用でかそうだな(^^;

System.patch +部分を追加
*** System.pas	Thu May  2 12:59:17 2002
--- System.new	Thu May  2 12:58:55 2002
***************
*** 10217,10222 ****
--- 10217,10225 ----
          }
          CALL    CurrentException
          OR      EAX, EAX
+         JNE     @@Done2
+         CALL    UnblockOSExceptions
+         JMP     @@Done2
          JE      @@Done2
          CMP     [EAX].TRaisedException.HandlerEBP, EBP
          JA      @@Done2
Kylix2 の System.pas を元にしているが、FreeCLX でも変更点は同じ

特定のプロジェクトだけ変更する場合
[t_kumagai@zob sample]$ source /usr/local/kylix2/bin/kylixpath
[t_kumagai@zob sample]$ cp /usr/local/kylix2/source/rtl/sys/System.pas .
[t_kumagai@zob sample]$ patch < /home/t_kumagai/System.patch 
[t_kumagai@zob sample]$ ln -s /usr/local/kylix2/source/rtl/sys/objs/
[t_kumagai@zob sample]$ dcc -y -u/usr/local/kylix2/source/rtl/sys/ System.pas
[t_kumagai@zob sample]$ startkylix &

Kylix:ツール 環境オプション ライブラリ ライブラリパスにカレントディレクトリ追加
./:/usr/local/kylix2/lib:/usr/local/kylix2/bin
プロジェクトを再構築する。

ライブラリごと変えてしまう場合
[t_kumagai@zob sample]$su -
[root@zob root]# cd /usr/local/kylix2/source/rtl/sys/
[root@zob sys]# patch < /home/t_kumagai/System.patch 
[root@zob sys]# dcc -y -N/usr/local/kylix2/lib System.pas
[root@zob sys]# dcc -y -p -N/usr/local/kylix2/lib System.pas
[root@zob sys]# dcc -y -N/usr/local/kylix2/lib/debug -$D+ System.pas
[root@zob sys]# dcc -y -p -N/usr/local/kylix2/lib/debug -$D+ System.pas
dcc オプション詳しく追ってないが FreeCLX の Makefile では -q -z -m も付いていた。

IDE は /usr/local/src/runimage/ 以下を参照しているようなのでそちらも変更
[root@zob root]# cd /usr/local/src/runimage
[root@zob runimage]# mv kylix2 kylix2.back
[root@zob runimage]# ln -s /usr/local/kylix2