2008/09/28(日)触発されるか?

WEBぐるぐる

nabeの雑記帳から

ダイアモンドバッファ+OP-AMPのヘッドフォンアンプです.基板をいただきましたので,とっとと製作しないといけないのですが,トランジスタの選別まできました(すすんでないやん).
秋月で2SC1815/2SA1015のそれぞれ200個セットを発注しておいたので,これを対象に選別.が,外気温の影響が結構くるようなので,ちょいとまずいですね.現状コレクタ電流を固定にして,ベース電流を測っています.このコレクタ電流がまずいんですよねぇ.アナログテスタで見ているので,毎回ガッチリと10mAとできていない気がします.ここらへんは帰還回路で定電流源にすべきだったかな.CRDだと,測定を続けていくうちに変化しそうだしな….

1815を90個程度測定.GR品なのに,hfeが200倍未満のがあるのだけれど,測定ミス…だと信じたい.Ic=10mAに対して,50uAを超えるものが出てきている.最大でも48uAを下回るものが殆ど無いので,おおよそ200チョイのばかり.秋月で買ったGR品は,ギリギリGR品ばかりなのかなぁ.だとすると,選別も容易な気がするけれどw
室温も測定しながら調査すべきだナァ.とりあえず測定時間帯をそろえたいと思う.明日は2SAのほうに手を出して,同等のhfe品があれば,ペアを作ってダイアモンドバッファを仮組みして確認していくのがよいかな....

FET OP-AMPの選別で懲りたからな.そっちの作成をどうすべきか悩むなww


なる研から

MicroChip社のグラフィックライブラリのネタを知った.
なるほど,ライブラリ/コードつきで開示してきたか.ライセンスを確認していないが,ZigBee stack等と同じで,PICマイコンでの使用のみ許可,というカタチなのだろうか.
あまりガッチリと作りこむと,重くなるし,汎用性を多少捨ててでも高速化を期待するのだけれど.まぁしかし,あらゆる状況に応じて解が変わるのも確かですね….
趣味の範疇でやるなら,あらかた自分で作ってしまいたくなるのだろうな.有志でGUI作るのもいいかもしれないねぇ.


なんでも作っちゃう、かも。から

MPPTキタコレ.先日,秋月通販で1000円のモジュールを買ったところなんだよな.3V50mAモジュールの4枚セットの模様.6V100mAで使用を考えています.
回路図を拝見したけれども,結構単純な回路でいけますね.こちらはAVRでいくか.. 在庫で8pinのPICもあったな.ライタもあるし,たまにはPICでもいいかもしれないですねw

その電源はZigBeeモジュールのアプリを考えていたのだけれど,これまた頓挫中.いかんね.



リンク集

部屋の整理,もとい,部品の整理をしているのだけれど,メーカサイトやらちょろちょろ検索しているので,後日,wikiコンテンツとして作っておきます.
折角なので,巡回している個人サイトも並べておこうかしら…?
# それすると,こんかいのようなぐるぐるネタが使えないのカー

2008/09/27(土)TOPPERS/ASP kernel環境

前置き

先日,sh-elf-gcc環境をbuild/installした.
今回は,TOPPERS/ASP kernelを導入したいと思う.OSEK,JSP kernelもあるが,新しい物好きということでASP kernelを持ってくる.
以後,SH系の開発環境は,基本的にcygwin環境上で行うこととする.



[TOPPERS]ASP kernelを使ってみる

ファイルの展開

まず,/home/xxxx/ 以下(どこでもいい)にkernelのアーカイブを展開する.

$ cd ~
$ zcat /cygdrive/c/Workspace/asp-1.3.2.tar.gz  | tar x
$ zcat /cygdrive/c/Workspace/asp_arch_sh12a_gcc-1.3.1.tar.gz | tar x

順序が前後するが,sh12a環境においては,hwe環境に入っている,asp/pdic/sh以下のファイルを同名のディレクトリに展開しておく必要がある.
architecture依存部として,SH向けは以下の2種類がある.今回はgccをtargetとしたので,gccだけを解凍していた.ところが,asp/pdic/sh 以下が, HEWにしか存在していない.

  • SH1/2Aアーキテクチャ・GCC依存部パッケージ
    asp_arch_sh12a_gcc-1.3.1.tar.gz
  • SH1/2Aアーキテクチャ・HEW依存部パッケージ
    asp_arch_sh12a_hew-1.3.1.lzh

ということで,lzhを解凍して,c/hの改行コードをLFのみに変えて保存し,pdic/sh/へ移動させた.


kernel configuratorを作る.

$ cd asp/cfg
$ make depend
# make

ただし,C++のlibraryであるところのboostが必要となる.ver.1.33での構築が実績のある環境だ.
ただし,cygwin環境では決めウチされる模様.Makefileの冒頭でこうなっている.

ifndef BOOST_DIR
	ifndef BOOST_VERSION
		BOOST_VERSION = 1_33_1
	endif
	ifeq ($(OSTYPE), msys)
		BOOST_DIR = /mingw/include/boost-$(BOOST_VERSION)
	else
		ifeq ($(shell echo $$OSTYPE), cygwin)
			BOOST_DIR = /usr/include/boost-$(BOOST_VERSION)
		else
			BOOST_DIR = /usr/local/include/boost-$(BOOST_VERSION)
		endif
	endif
endif

自力でboostをmake/installしてみた(ver.1.36)が,引数をなにも指定せずに行ったため,install prefixは/usr/local/以下になってしまった.作られたライブラリ等,微妙にまずかったようで,リンクエラーとなった...orz
参考まで,boostディレクトリの指定方法を記録しておきます.

% make depend "BOOST_DIR=/usr/local/include/boost-1_36"
% make "BOOST_DIR=/usr/local/include/boost-1_36"

で,結局cygwinのsetupプログラムで更新をして終了.既存のcygwinに対しても,setupで更新ができる模様です.便利ですな...


sampleプログラムを作る

kernel環境には,サンプルコードもmakeで作れるようなものが用意されている.JSP kernelのときは,ターゲットアーキテクチャとを指定する必要があるのに対して,ASP kernelではターゲットのみでよくなっている.
そりゃまぁ,ターゲット同じでアーキテクチャが異なることは考えづらいですしね...
今回のsh12a-gcc環境に含まれているアルファプロジェクトのターゲットソフトを作ってみましょう.

$ cd ~/asp
$ mkdir app01
$ cd app01
$ ../configure -T apsh2a_gcc -D ..
$ make depend
$ make

これで,asp.(exe|srec|syms)のあたりが生成されます.コードができたか確認したいので,ちょっと見てみましょう

$ sh-elf-objdump -D asp.exe

ダーッと逆アセンブルコードが出てきますナ.



次回予告

次は,CQ7144としてターゲット環境の構築を進めていきます.
ささっとググったところ出てこなかったので,作らざるを得ないというところですね.無念...

2008/09/17(水)[cygwin][SH2][組込] cygwin 上に,クロス開発環境を構築する~SH編~

結論:linuxマシンを持ってきたほうが早い... VMwareがあるならそっちのがいいんじゃね?

前置き

まだ実績は無いです.cygwin上でSH2のクロス開発環境を用意する.. 途中.
buildが終わらないから中断した. 前線基地でもとりあえずbuildまわしっぱなしで寝てみる...
KPITやHEWやら使って TOPPERS kernelをbuildして~,と考えていたのだけれど,なんかしっくりと来ない.perl/awk/make等全部同じ環境(dll含めて..)で動くものを用意したほうが安定しそうなのでこうなった.本当は無償版HEWで環境作れたらよかったのだけれど,アーキテクチャ依存部を持ってきてTool chain違いで跳ねられたのであきらめた.コンフィギュレータはcygwin/VC++の両方で作るところまでやった.Boost lib.が要るなど,案外面倒だ.手軽に使いづらいのと,開発環境のメンテを考えると,市販のRTOSを選択するのが賢いと思われる.TOPPERSをhackして自分でカスタムできるレベルであればその限りではないが....


必要ファイルをそろえる

下記のファイルを拾ってくる.


TOPPERS/ASPカーネルのbuild環境は,以下のとおりらしい.とりあえず新しい物好きなので上記で試してみる.

  • binutils-2.16.1.tar.bz2
  • gcc-3.4.4.tar.bz2
  • newlib-1.13.0.tar.gz

*1 : jaistなどのGNUソフトミラーサイトから探してください..

手順

ここではcygwin環境での操作をメモしておく.パス名等は適宜読み替えて対応されたい.

下準備とbinutilを作る.とりあえずhomeディレクトリ配下において様子を見る.

$> mkdir -p usr/bin
$> mkdir -p usr/src
$> mkdir -p usr/tmp/binutils-build
$> cd usr/src
$> bzcat /cygdrive/c/temp/cross/binutils-2.18.tar.bz2 | tar x
$> bzcat /cygdrive/c/temp/cross/gcc-4.3.2.tar.bz2 | tar x
$> zcat /cygdrive/c/temp/cross/newlib-1.16.0.tar.gz | tar x
$> cd usr/tmp/binutils-build

$> ../../src/binutils-2.18/configure --prefix=/home/XXXXX/usr --target=sh-elf
$> make && make install

$> export PATH=/home/XXXXX/usr/bin/:$PATH

GMPをひろってきて,解凍して...面倒くさいなぁ..

> ./configure
> make
> make check
> make install

MPFRも configure, make しないとだめぽいな... GMP先に入れないとダメです.

> ./configure
> make
> make check
> make install

で,ようやくgccのクロスコンパイラとnewlibが作れる.

$> mkdir -p usr/tmp/gcc-build
$> cd usr/src/gcc-4.3.2/
$> ln -s ../newlib-1.16.0/newlib .
$> cd ../../tmp/gcc-build/
$> ../../src/gcc-4.3.2/configure --prefix=/home/XXXXXX/usr --target=sh-elf --enable-languages="c" --with-newlib
$> make
 ... (E6600/MEM2Gで18時間程度かかりました)
$> make install

cygwinだと数時間オーダ18時間.. newlibのbuildがアーキテクチャごとに全部回るみたい('A`


おまけ

MPRF/GMPを入れなかった場合.昔と同じようにGCC,binutil,newlibだけでbuildを試みた例.makeに失敗するので気づくでしょう...

$> mkdir -p usr/tmp/gcc-build
$> cd usr/src/gcc-4.3.2/
$> ln -s ../newlib-1.16.0/newlib .
$> cd ../../tmp/gcc-build/
$> ../../src/gcc-4.3.2/configure --prefix=/home/XXXXX/usr --target=sh-elf --enable-languages="c" --with-newlib

> configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.0+.
> Try the --with-gmp and/or --with-mpfr options to specify their locations.
> Copies of these libraries' source code can be found at their respective
> hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
> See also http://gcc.gnu.org/install/prerequisites.html for additional info.
> If you obtained GMP and/or MPFR from a vendor distribution package, make
> sure that you have installed both the libraries and the header files.
> They may be located in separate packages.

エラーがでる.いつの間にかいろいろライブラリを要求するようになってしまったようだ.

C#実装事例?

delegateについて

ググレカス→delegate C#

注意:Delegateクラスもある.delegate型とは別ぽい.

しかし,"デリゲートの使用 (C# プログラミング ガイド)"では,以下の記述がある.

デリゲート型は System.Delegate から派生するため、
このクラスで定義されているメソッドとプロパティをデリゲートで呼び出すことができます。

見た目・UI操作

強制クローズを禁止する.(システムメニューの削除,ALT+F4の終了排除.)
→参照 http://www.atmarkit.co.jp/fdotnet/dotnettips/142closebtn/closebtn.html



非同期プログラミング

宇宙仮面のC#プログラミング-非同期プログラミングと, 例のサンプルから推測交じりで消化.delegate,Thread class等の比較による紹介.

リード処理をdlegate宣言したクラス(変数?)にセットする.読み出し要求が発生したときに,BeginInvokeする.このとき,非同期callbackを行うため,AsyncCallbackオブジェクトも渡す.処理終了時に,AsyncCallbackオブジェクトを作るときのmethodが呼ばれる.引数として,(IAsyncResult)arを受け取る.キャストして,自分の定義したdeletgate型へ修正する.

ReadInputReportDelegate deleg = ( ( ReadInputReportDelegate )( ar.AsyncState ) ); 

ar.EndInvoke()でスレッド終了.この引数には,delegate宣言したmethodのうち,参照型'ref'をつけたものが順に渡せる.+ar自身.

deleg.EndInvoke( ref myDeviceDetected, ref inputReportBuffer, ref success, ar ); 

System.Object System.Delegate System.MulticastDelegate

この型のすべてのパブリック staticメンバは、スレッド セーフです。



Threadの寿命について

class methodをThreadStartクラスでインスタンス化したとき,そのクラスから半ば独立したthreadで起動する模様. 親windowが死んでも走り続けていたので,なぜか不思議であった.上記終了処理で子スレッド終了を待たせてみたが,スマートではないと思えたので検索↓.
k.kinukawa(momo_dev)の日記より,デフォルトはフォアグランドスレッド?として起動していた模様.
ハンドル類はcloseされることなく,そのスレッドが従属するクラスのデストラクタも呼び出されなかったため,裏でHID Read fileを無限に繰り返す状態になっていたようだ.


(Rxthread).IsBackground = true;

とセットしてから,

(RxThread).Start();

とすることで,バックグランドで走るようになった.親スレッド(Form)をcloseした際に,デストラクタが呼び出された.Threadは放置すると良くないと思ったので,thread.abort()で殺した.

この処理を実装しなくても,Thread objectのデストラクタかどこかで閉じられた模様.ファイルハンドルがどうなったのか….safefilehandle objectで触っていたから,これもデストラクタが綺麗にしてくれたのだろうか.不安が募るが,何という適当な処理言語だろう….runtimeでデバッグコードが走るようなものか?安全といえば安全だが.とりあえず明示的に殺すことにする.

デストラクタの宣言

C++と同じ.クラス名の先頭にチルダ'~'をつける.引数はナシ(空白).objectが破棄されるときに呼ばれるハズ.Formのクラスですが,ALT+F4では呼ばれなかった@デバッガ.breakがうまく効かなかっただけなのかなぁ...

class Foo { ...
  ~Foo()
  {
  }


process間データ通信について(C#→Win32native)

C# .Net SendMessageで他のアプリに文言を送信したいを参照.

キーワード:C# Alloc message lparam wparamで,探索.

C#/Win32API覚書

2008/09/08WinPGMimport

Windows Programming

主にC#ベースで作成します.速度を求めるならnativeコードで実装すべきでしょう.とりあえずC#で作って,速度を稼ぎたいところでunsafe codeを書いていきます.
その時点でWindows APIの使用となり,Import宣言等を自前で書く必要が出てきます.

それで我慢できなくなったら,VC++等への移行も検討しましょう.