2008/10/29(水)TOPPERS/ASP kernelのSH7144への移植~その1

[TOPPERS/ASP]プロセッサ依存部の資料

大枠

ポーティング資料の大元は,以下のファイル.

asp/doc/porting.txt
  TOPPERS/ASPカーネル
  ターゲット依存部 ポーティングガイド
  対応バージョン: Release 1.3.2 (最終更新: 2008年8月3日)

sh12a_gcc/prc_user.txt より

@SH12Aプロセッサ依存部(asp-1.3.1対応)Last Modified: '08/05/12 
SH13A依存部は,SH1/2/2Aをターゲットとしている.SH1/2/2Aにはいくつかの
バリエーションが存在し,バリエーションによっては,割込み関連のレジスタ

誤植もあるが,SH2対応のarchitecture対応と明示されている.(方針) (方針)SH7144対応は,コレに対するpatchという形で作成する

SH2A(7211)とSH2(7144F)とでは,SCIそのものの構成が変わっている.SCIのレジスタアドレス・制御レジスタの構造はもちろん,SH2AのほうがFIFOを積んでいて快適そうだ.
流用できないことが自明になったが,本家が pdic/sh/sh_scifとしているため,当初はSCIFのコードをtarget依存部においていた.しかしながら,秋月のSH7145へのポーティング((私がやるのではなく,第三者が,と考えています.同時に複数触らない&買い増すならSH2A以上とか..))を視野に入れると,pdicなのかな?と.ただ,pdicて外付けICのためのように思えたりもするのだけれど….

ディレクトリ構成の詳しいシキタリやドキュメント記述ルールも明確化しないと,結構ばらついているように思います.
いざリリースしようと思っても,どれにあわせるべきかで悩んでしまった.

RENESASのサイトでダウンロードできるヘッダファイル集*1をパクってくると良い感じだろうか.

ToDo?

資料より,何をすべきしたかをまとめる.もともとポーティングについて纏まって記述されているが,具体的作業を併記することで,別プロセッサへの移植の助けになることを期待.

ファイルの新規作成
  • asp/arch/sh12a_gcc/配下
    サポートするプロセッサの型番を(sh7xxx)とする.
    • テンプレートファイル(sh7xxx.tf)
    • カーネル実装のターゲット依存の定義(sh7xxx_config.h)
    • ハードウェア資源のヘッダーファイル(sh7xxx.h)
  • asp/target/cq7144/配下(ディレクトリも新規作成)
    基本は既存のtargetファイルを元に作成する.今回はapsh2a_gccをベースにする.
    {asp/doc/porting.txt::10.1 ターゲット依存部のファイル一覧に詳しく書かれている….
    • E_PACKAGE
      asp/doc/porting.txt :: 9.2 パッケージ記述ファイル/option
    • MANIFEST
      asp/doc/porting.txt :: 9.2 パッケージ記述ファイル/option.個別パッケージ作成用ファイル.
    • Makefile.target
    • cqsh2.h
    • target.tf
    • target_cfg1_out.h
    • target_check.tf
    • target_config.c
    • target_config.h
    • target_kernel.h
    • target_rename.def
    • target_rename.h
    • target_serial.c
    • target_serial.cfg
    • target_serial.h
    • target_sil.h
    • target_stddef.h
    • target_support.S
    • target_syssvc.h
    • target_test.h
    • target_timer.cfg
    • target_timer.h
    • target_unrename.h
    • target_user.txt
      asp/doc/porting.txt :: 9.1 ドキュメントにて要求されている.記述内容もtarget設定や環境など該当ドキュメントに記載されている.
    • test_log.txt
      sampleプログラムのconsole出力結果(log.

以下,さらに抽出.

  • 不思議ファイル
    個別パッケージ生成時のコマンド例
      % utils/makerelease arch/arm_gcc/MANIFEST
    簡易パッケージ生成時のコマンド例
      % utils/makerelease target/at91skyeye_gcc/E_PACKAGE
    

[bf:MANIFEST}や*PACKAGEで,リリース用のアーカイブを作る際に内包させるファイル等を明記する,ということのようです.

  • その他のファイルが必要な場合は,プロセッサの型番を先頭に着けたファイルを作成,

ターゲット依存部からインクルードすればよい.


割込み優先度設定

prc_config.c :: const IPR_INFO ipr_info_tbl[] を IPR_INFO_TBL_DATA で初期化する.依存部(shxxx_config.h)にて,IPR_INFO_TBL_DATAを含めた割込み関連のシンボルを定義する.割込みベクタのMIN.値をindex=0として,該当ベクタの優先度設定のためのIPRレジスタのアドレスをaddressメンバへ放り込む.resere/空きもあるので,そこは 0を代入しておくこと.

typedef struct {
    /* 割込み優先順設定レジスタのアドレス */
    uint32_t address; 
    /* オフセット */
    uint32_t  offset;
} IPR_INFO;

メモ

tareget依存部のmakefile(Makefile.target)に,以下のシンボルが存在する.
これによりプロセッサ依存部のファイルを選択するようになった.JSPではプロセッサとターゲットを個別に指定する必要があった*2と思う.

BOARD = cqsh2a
PRC   = sh12a
TOOL  = gcc

*1 : include_sh_080130.zip

*2 : ほとんど触らずに終わったので怪しい

低電圧ヘッドホンアンプ

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 : "こういう音が聞こえる"という記憶も含む.つまり劣化している...のか?

2008/10/11(土)世界同時株安とか

世界同時株安について考える

News Casterを見ながらつらつらと書いてみる.コメンテータに北野たけしってのが素晴らしいですな.
個人的には,たかじんのほうが面白いかな...そこまで言って委員会もあるから,News枠ではイラナイか:)

株安による影響

会社の保有する資産価値が下がる
  • 貸し渋り
  • 貸しはがし

∵金融機関から借金をするが,会社の信用として資産価値をみられる(or 担保として評価される?)借金ができなくなると,保有する現金が少ない会社はキャッシュフローが止まり,倒れる.

金属等の原材料や燃料費(エネルギー費?)の高騰

純粋に商品単価に響いてくる.
例として,部品製造の町工場レベルが原材料込みの契約を結んでいる場合に,原価高騰をコミで契約されていなければ利益が減る.
# 消費者の購買意欲もさがるだろうな..

下請け会社は,段数が増えるたびにハネられていくので,経費削減せざるをえない.人件費カットが実施しやすい(?),また,賃下げ・ナスカットも考えられる.
→ 社員/個人の収入減による消費意欲低下

消費意欲低下により,製造業の製品販売数の低下が発生し,会社の利益低下が生じる.
前述の資産低下(売り上げ低下→現金減少)



円高による影響

言うまでもなく,為替変動により,輸出入の利益に響く.
また,円高が進むと日本からの輸出製品が海外で買われにくくなる(現地での価格が高騰するため).

何故円高が進むか?(円-ドルの例)
ドルの貨幣価値/信用が失速するため,外貨に買えて保有するから.

→貨幣価値/信用って?
このあたりは細かく話を聞く機会が少ない.以下,妄想してみる.
要は,ドルを持っていたとしても,株安等による影響を受けて,インフレが始まり,あるモノを買うときに,相場変動前に100円/1ドルで買えたとしても,変動後に100円/2ドル(円高.2倍相当)となった場合を考えるとわかりよい.変動前に円に換えていれば,変動前の資金で変動後のものは同じだけ買える.しかし,変動前からドルをキープしていた場合,同一資金では半分しか替えない.

つまりはこういう理解でよいのだろうか.
前提としてインフレが生じる必要があるが,その発生要因としては,流通貨幣の増加が考えられるのだけれど.(公定歩合調整/現金調整(国債売買?))


まぁ,イチバンでっかいのは,各個人が財布の紐を固く縛ることと,金融商品を有する人/会社が現金化を進めることだろう.
銀行にせよ,保険屋にせよ,引き出し要求が一度に来ても,実際に全ての現金化はできない状態なのは明らか.

昔から,借金しないと回らないというこの社会の仕組みが理解できずに居るわけなのだけれどね...
借金していると税金対策になるのかナァ.だとすると会社では理解できるけれど,個人で借金をしていくのは理解できない.家のローンとか, 明らかに年収を上回るモノは考えられるけれどネェ.


同件に関する日記へのリンク

あたたんblogでも,考察とか妄想とか...
この記事で,世界恐慌*1時のダウ平均を


たまにはこういうネタもイイヨな...
間違ってたりしても責任持てません.むしろ,間違いは指摘してただきたい...

*1 : 世界恐慌@1929.24,Oct.に起きた.詳しくは世界恐慌

2008/10/05(日)[GCC] SH2環境不具合疑惑(自己完結)

前ふり

066にて,SH-ELF-GCC環境を準備した.
ところが,コレには不具合がある模様で,buildできないと思われる.記事作成中にふと思い立って解決した.とりあえず経緯だけでも残しておく.outputとして,TOPPERS環境への反映を行うことにする.

問題点

TOPPERSのconfigureにより,targetサンプルプログラムを作る.のちほどまとめ記事を作成するが,CQ-SH7144向けのポーティングをしたものだ.
コンパイルがとおることまでは確認できたが,下記のとおりリンクエラーが生じる.

sample1.o: In function `main_task':
/home/XXX/asp/app02/sample1.c:352: undefined reference to `___udivsi3_i4i'
log_output.o: In function `convert':
/home/XXX/asp/app02/../library/log_output.c:65: undefined reference to `___udivsi3_i4i'
collect2: ld returned 1 exit status
make: *** [asp.exe] Error 1

KPITのWEB pageでは,sh-elf-ldへの引数で,-L -lオプションの記述がまずい場合に起こりえる旨,記述があった.しかし,今回はそうではなさそうだ.

釈迦に説法だと思うが,errorの意味としては,リンク時にlog_output.cの65行目で___udivsi3_i4iというラベルが見当たらないよ?という意味である.


解決手段

リンク時,リンカに対して,-nostdlibを指定している.これは,gccの和訳(勝手にリンク)によると,以下のとおり.

リンク時に標準システム・スタートアップ・ファイルや標準システム・ライブラリを使用しません。
スタートアップ・ファイルは一切リンカに渡されません。
指定されたライブラリだけがリンカに渡されます。

スタートアップルーチン等は,TOPPERSのarchitecture依存部で実装するため,gccの標準ライブラリは不要なためである.

そこで,-m2でSH2を指定したときだけに問題が見えていたため,以下のディレクトリにあるobjectを全て逆アセンブルしてみる.

usr/lib/gcc/sh-elf/4.3.2/m2
% sh-elf-objdump -Dtr foo.[ao] > foo.[ao].txt

便宜上,ワイルドカード表示にしてあるが,実際にはテキストエディタでエイヤと作成した.find --exec ...が正等かもしれないが,あんまり覚えてないので...
出力させたファイルをgrepしてみると,___udivsi3_i4iが見つかる.

libgcc-Os-4-200.a

居た・・・コイツか.確かに,リンク指定は-lgccとしか指定していない.とりあえず適当なところに下記の行を追加して試してみる.

LIBS := $(LIBS)  -lgcc-Os-4-200

なんの問題もなくbuild完了./(^o^)\ナンテコッタイ

GCC4.3.2環境でのみ生じる問題なのだろうか.TOPPERS/ASP kernelのSH12A architectureの動作保障がSH2でしか存在していないためなのだろうか.
ぶっちゃけ,cygwin環境でもう一度gccのフルビルドはしたくない...

それどころか,今回のポーティングやGCCの一部を追いかけることにより,HEW環境の立ち上げが最適解であるように感じられた.
gccはその汎用性が優先されている感を受ける.最適化範囲も,それほどglobalでは無いように思えるのだ.ADS/RVDSのようにレジスタ直行性も視野に入れてアサイン・命令の入れ替えをしてくれない(と思う).HEWは,メーカ謹製コンパイラを使っているのだから,そのアタリの最適化もしてくれているハズだろう(未確認).

おかげさまで,sh1/sh2/sh3での除算比較ができましたわ.とりあえずSH3未満だと除算命令やシフト命令のあたりで結構きつい制約があるように見受けました.また,SH2以下だと,汎用レジスタバンクが存在しないため,割り込み応答性能が劣るという問題を認識しました.

う~ん,結局動作クロックを挙げて,外部との境界にキャッシュを置くしかないんだろうな・・・.SH4ボードとか買ったほうが早そうだな.ALPHAの板が4万以下だから安いんだよな.
安いといっても,玄人箱が2台も買えるのだが('A`


足掛け三日ほど悩んでいました.下らんことでハマるハマる...