ASP kernel 1.3.1-SH7144依存部(CQsh2_gcc)

TOPPERS/ASP kernelのSH7144への移植~その3

日記タイトルとしてはコッチが正解.wiki titleにも生ってしまうので,タイトル名はソレらしいものへ修正.

[TOPPERS/ASP] SH7144向けASP kernel 1.3.1対応ターゲット依存部

表題のモノをリリースいたします.個別パッケージのみのリリースとさせていただきます.

当方ではROM化した環境でのみ確認しております.内蔵RAMだけでの動作も未確認です.
RAM上にコードを置いた場合,微微小時間待ちのチューニングができておりませんので,実時間に対して待ちすぎてしまうことが予想されます.

ターゲット略称CQsh2_gcc
target H/WCQ出版,Interface誌 2006年 6月号付録 SH7144ボード(※1)
ターゲット非依存部asp-1.3.2
他必要な個別リリース物asp_arch_sh12a_gcc-1.3.1.tar.gz(※2)
言語処理系binutils-2.18, GCC 4.3.2, newlib-1.16.0, (gmp-4.2.3, mpfr-2.3.2)

※1ただし,付録基板は以下の改修済みであることを条件とする.

  • DBGMD端子のPullDown
  • SCIF1のレベル変換後のPullUpパターンカット
  • 電源レギュレータ入力コンデンサ増強
  • 外付け高速SRAM/ロジック追加

※2SH1/2Aアーキテクチャ・GCC依存部パッケージ(released at 2008-05-13)


実作業

メモとして不足があるとは思いますが,076077とが対象となります.ご参考まで.

低電圧ヘッドホンアンプ

2008/10/14工作::ampimport

低電圧ヘッドホンアンプ2?(nabeさん設計) with 基板ありがとうございます

nabeの雑記帳にて,40万ヒットのプレゼント(2008-09-17)がありました.
迷わず申し込んで,基板+OPAMPをいただくことができました.ちょっとした郵便自己があってケミコンは破裂*1していましたが(笑)

20081014_opbuf01.JPG

ご覧のとおり,いじくっている最中ではありますが,blogへのコメント期限が近いので,途中経過を報告させていただきます.なお,こちらに書く前に,mixiで少しメモっていたので引用してきますので,文体がいつも以上に酷いです*2


*1 : 郵便局の機械で詰まったらしいです.機械のほうが心配だったよ...

*2 : mixiメモへの自分用リンク:2008年10月09日02:24, 2008年10月14日02:02

結論

現時点では,USBDAC出力をPC側で絞った音のほうが好みです.
ヘッドフォンアンプにより,アナログアッテネータで減衰することで音質の向上が見込めるということですが,しばらくUSBDACの音に惚れていたせいか,未だ馴染めません.

回路定数の修正や,ボリュームの変更で大きく変わるのか微妙ですけれど,低音が強調されすぎの感じがします.もともとこういう音かもしれませんが・・・.


[TRY]foobar2000で音量を下げる

アンプの出力をあげて,USB-DACをヘッドフォン直結で聞いていた音量にしてみました.
これこれ.低音が弱まって聞きなれた音になりました.ということは,PCで音量を下げた弊害で音が変わっていたということか!?

音声データはCDから可逆圧縮でリッピングしたものなのですが,デジタル処理しただけでは情報が変わってしまうというのか.


TRY予定

エミッタ抵抗で音が大きくは変わらないとは思いますが,コレも経験.
推奨値の1Ωに置換して聞いてみます.

本家のコメント85にて,OP-AMP近傍にパスコンがないとの指摘.OSコンから数センチ離れていて,間にトランジスタさんもいるようです.トランジスタが電流をそんなに引っ張らない気もしますが.これもパスコンもしくはバイパス配線してやると向上が期待できるかもしれません.
というか,先に電源ラインに問題があるかを確認すべきですね.
シンクロスコープで見えるか(要観測)



以下,日記形式にて.

実装前

ダイアモンドバッファ部分について,トランジスタの選別が必要と思い込んでいました.部品入着を待っていたり,選別作業に音を上げていたら,コメントが... 一週間近く見落としていました(失礼しました)

もう一度回路を見直すと,ダイアモンドバッファ出力がOP-AMPへと帰っているではありませんか!.帰還してるなら,選別しなくても出力にDCが乗ることもなさそうですし,どうせコンプリメンタリでも歪むのだから,と考えて実装へと移りました.


実装当日

nabe先生のヘッドフォンアンプ基板,選別あきらめて実装しますた.とりあえずバラック状態でエージング開始.ケーシングすれば半田付けしなおすわけで,熱劣化再発生という罠も...レポを一度出してからケース入れすることにしよう.


とりあえず電源入れてすぐは,すごくもやのかかった感じがした.高音がのびず,低音がboostされた感じだ.PC側ボリュームをMAX.にしているせいもあるし,回路定数を在庫で合わせてしまっている(後述)から,差分もあるだろう.

で,しばらく温まってきたせいか,耳が慣れてきたせいか,もやが少しマシになる.というか,もともとエコーがかかっていて,ソレが強調された感じだった,かな..注力して効いてしまうと,耳のフィルタのせいで感じも変わるから難しいねぇ.

低音が増してるのは間違いないな... 長時間使うと疲れそうだ.しばらく放置して様子を見るか.入力短絡しておいたほうがいいんだろうな.

エミッタ抵抗は手持ち在庫の都合で4.7Ωを実装.
CRDは1mAを使用.
電池はeneloop単3で初期充電のものを使用.

エージング三日ほど

ヘッドフォンアンプ,三日三晩くらいは放置したので,エージングは十分なはずなのだが,高音が伸びない.
良く考えたら,以下のことがあげられる.

  • eneloopは初期充電のものを使っている
  • 出力段の抵抗が定数違いである
  • ボリュームが推奨品ではない*3

抵抗は明日にでも入着する*4ようなので,電池を疑ってみた.

寝る前にするんじゃなかったwwww

電池交換後

アルカリの中古電池があったので,コレを使用.新品過ぎると少し電圧が心配だった.とはいえ,アンプとOSCONの耐圧が2.5Vというのに引っかからなければいいので,1.5+αであれば耐えられたとは思う.設計は1.2Vなので,コレで比較しなければならないわけだが.# 充電器が見つからない.結構片づけが進んでいるはずなのに.チェックする前にしまったか.

電源電圧向上により,高音の伸びが復活.低音は相変わらずboostされている.解像度はUSBDAC並みに上がったと思われる.注意深く効くようになって,耳がエージングされて*5しまっているところもあるので,比較時には聞き込んだものか,初めて聞くもので比較すべきだろうか.

現在の評価楽曲

現状,水樹奈々嬢のSecret Ambitionと Heart-Shaped Chantとを使用.前者はハイハット,後者は弦楽器(ハープみたいなやつ)がどこまで聞こえるか,で,解像度の良し悪しを判断している.他の音に混じって聞こえてこなかったのが,聞き分けられるようになってきた.耳がなじんだせいもあるから,これだけで評価してはいけないということだなw

特にレコーディングされたものは,vocalのブレスを殆ど意図的に消してしまっていて,それが楽曲に紛れて消えるかどうか,とか,息遣いが判るか,なども判断材料にしたかった.その点,同人CDはブレス消してないのもそこそこあるようなので,狙ってみるといいかもしれない.

電子楽器が多いのはちょっと耳が痛い.低音boostされたものを聞いても,疲れる.寝る前だからか?w


寝る前の考察

ボリューム調整による入力段のフィルタ特性の変化も気がかりではあるが,PC出力を同じ大きさで比較してみると,ちょっと出方が違うみたい.
USBDACは出力振幅がでかいので,PCで絞って聞いていたけれど,今回はPC出力はDAC, このヘッドフォンアンプで減衰させているわけだけれども,本来の音がこういう低音の効いたものなのかもしれない.な...

リファレンスが無いから,なにが正しいのかわからなくなってきたぜwww
もうひとついえるのは,ヘッドフォンは所詮ヘッドフォンであるということかな...音圧を体で感じられるスピーカには敵わないわ.たぶん.

もちろん,双方ともにシステムがどの程度まで練られているかによるのだろうけれど.特にスピーカともなると部屋の影響まで受けてくるかなぁ.ヘッドフォンだと,密閉型を選んでしまえば,外の音を遮断できるから,場所に関係なく再現できるのが強みかなぁ.(騒音が酷すぎるところは除くw


抵抗差し替えてエージングは要るかしらねぇ.一度レポあげておいたほうがいいな.ケーシングも未だなんだけどw
# 図面ナシでエイヤで空けてしまうか・・・.いつもコレで失敗するんだよなぁ('A`

*3 : デジットの高級ボリューム(アルプス?)を使用

*4 : 配送遅れで入手できず.レポに間に合わなかった.

*5 : "こういう音が聞こえる"という記憶も含む.つまり劣化している...のか?

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で,探索.