2004-08-01から1ヶ月間の記事一覧

LCx

start.asmの割り込みハンドラおよび例外ハンドラ入り口に、 lc0 = r0; // 性能低下抑制のためにLCxをクリア lc1 = r0; を追加しました。r0は0ですので、ループカウンタをクリアするコードです。このコードはループカウンタを保存した後に実行されます。 ルー…

mi_initialize();

うじのすけさんから質問を受けた_mi_initializeですが、これに関するドキュメントは私も見たことはありません。で、これに行き着いたのはマニュアルとソースの読み比べをした結果です。マニュアルは、"Basic Startup Code"を検索して行き着くページです。ソ…

board_config.h

TOPPERS/JSP 1.4ではターゲット依存部がCPU/システムの二層に分かれています。ところがワンチップマイコンの視点で言えば、システム部はチップとボードに分かれます。現在はこの両者をsys_config.hにまとめているため、自前のボードに移すときの障壁が少々高…

Release 1.1に向けて。

ようやく1.0がリリースできましたが、次の2点をリリース1.1で導入しようと検討しています。 C++対応 私自身がもうC++じゃないといやだ!という状態なのでこれは是非導入したいです。 SIL実装 ITRONの組み込みシステムにおけるPDIC機能ガイドラインに基づくSI…

文書更新

昨晩泥酔していてできなかった文書の更新をしました。新規文書を追加するつもりでしたが、変更してblackfin.pdfを変更しました。これに伴い、sourceforgeの文書とリリースを更新しています。リリースは1.0aになりましたが、コードに変更はありません。 文書…

正式リリース

TOPPERS/JSP1.4対応のBlackfinコンフィグレーションを正式リリースしました。 TOPPERS/JSP for Blackfin プロジェクト日本語トップページ - OSDN 対応するサンプルは0.7です。近々、以下の文書も追加する予定です。 利用者のための設定マニュアル 移植者のた…

例外の取り扱いを変更

Himejiリリースに向けてコードを凍結していましたが、本日比較的大きな変更を加えたコードをCVSにアップしました。Kokuraリリースで追加したEXCAUSEによる例外のベクトル化を取りやめ、Kumamotoまでの単一例外ハンドラに戻しました。 この変更はメモリー領域…

精査は続く

cpu_support.sを読み直しました。問題らしきものは見つかりません。OK。実行時間やプログラムサイズの観点から「ここをいじりたい」というところがぽろぽろあるのですが、ぐっと我慢です。

Scratch register not for use.

There is one "pure" global scratch register which compiler doesn't use and you can not use for computation, for Blackfin architecture. That is USP. Yes. If your code always in the supervisor mode, nobody need to keep USP. I hesitate to use…

知られざるスクラッチ・レジスタ

Blackfinには、条件付ながらコンパイラが決して使わず演算にも使えない純粋なスクラッチ・レジスタとして使えるグローバル・レジスタが一本あります。 USPです (^^; そう。ユーザーモードを使わないならUSPは誰に気兼ねすることなく使える非常に便利なレジス…

dsPIC

d:id:Chuckさんのところで取り上げられていましたが、電子工作の実験室にてdsPICの解説が始まっています。ざっと見た感じ、アーキテクチャーは2191とそれほど変わらない16bit非並列DSPのようです。デュアル・アクセス可能で汎用レジスタ数は16本。120MHz

無駄

お昼食べて眠いです。 TOPPERS/JSP for BFで一番無駄なのは例外ハンドラのベクトルテーブルです。なんと64エントリ256バイト!むぅ。でもscratchに押し込むのでそんなにインパクトはないかな。

コード精査

start.asmを再度読み下しました。問題ありません。例外ハンドラの中でスタックの使い方が8バイトほど無駄だったり、数サイクル無駄にしているところがあります。後日いじるかもしれませんが、Himejiリリース後です。 ライブラリをスレッド・セーフな物に変え…

ストイックすぎたかな?

Blackfinの正式リリースに向けて頭を冷やすという名目でARMの実装を読んでいます。こうして他の方が書いたものと比べると「あー、ストイックすぎたかな」と思う点もあります。たとえば、 BF版では割り込みネストを調べるたびにいちいちIPENDの一部をマスクオ…

BF版正式リリース近し

今日以下の3点を修正しました。 sys_rename.h / sys_unrename.h の過剰なリネームを削除 生成するライブラリ名をlibkernel.dlbに変更 device_dispatcher()をcpu_config.cからsys_config.hに移動 1.は本来リネームの不要なAPIまでリネームしていたことを受け…

私信

うじのすけさん、grooveに著作権表示について書き込みましたが、あんな感じでいいですか?

-si-revision

VisualDSP++ 3.5 can generate codes which avoid anomalies of each version of silicon. Usually anomaly avoidance code degrades performance, you should use this feature carefuly. Revesion can be specified as following : -si-revision 0.2 My EZ…

-si-revision

VisualDSP++ 3.5 はシリコンのリビジョンに応じてアノーマリー回避を行うコードを生成することができます。たいていの場合アノーマリー回避コードはやや性能が低下するため、正しいリビジョンを指定する必要があります。 使用するリビジョンの指定は次のよう…

進捗

今日のコードレビューでmake_priority_maskのバグを修正しましたが、あとは移植性が高まるようena_int, dis_int, make_priority_maskを整えたくらいで、コードの置き場所変更とコメントの整理がほとんどでした。正式リリースまであと少しです。

サンプル

これまでjsp_kernel.hをサンプルアプリケーションから直接読んでいましたが、user.txtにあるとおり、t_services.hとs_services.hを読み込むよう変更しました。

make_priority_mask

IAR書き換えサンプルを作ったときに、make_priority_maskのバグを発見したので修正しました。priority_maskを書き換えるときにはじめにゼロクリアしていませんでした。

コードの整理

start.asmのコードを再チェックした上、コメントとラベルを少し書き直しました。この部分は最初のころシミュレーションで動作を確かめたあと、kumamotoリリースのときにロジックを変更しています。そのため、改めて読み下して以下の点をチェックしました。 …

ROM化対策

アプリケーションから絶対に見えない関数です。BF533を「ブート」するとブートローダーが変数を初期化してくれますが、フラッシュROM上のプログラムを直接実行すると変数が初期化されないままです。そこで、スタート直後に_mi_initializeを呼べば、必要な初…

進捗

標準ライブラリのリンクについては、VDK対応ライブラリをそのままリンクするだけで大丈夫でした。実はMTライブラリはVDKに依存しないと聞いたことがあったのですが、半信半疑でした。今回VDK用LDFのマクロをそのまま持ってくるだけですんなりと動作していま…

標準ライブラリ対応

ありゃりゃ、単にリンクするだけでOKかもしれません。

ライブラリ化

TOPPERS/JSP for Blackfinのライブラリ化とサンプルのDXE化は一応終わりました。これでよかったのかどうかは疑問が残っています。一番の問題は実行ファイルのサイズが増えたことでしょう。リンカーのエリミネーションが効かなくなったため、不要なサブルーチ…

BTC

今日リースしたサンプルコードにBTCタスクのサンプルを入れています。TIのバックグラウンドデバッグに相当する機能です。なかなか便利な反面、表示フォーマットがプアだったりでまだまだです。せめてプロットくらいはしてほしいものです*1。 *1:プロットはで…

進捗

正式リリースHimejiに向けての作業は着々と進んでいます。あと、リリースに向けてやらなければならないのは プロジェクトのdlb化 サンプルのプロジェクト化 一般ライブラリのリンク 著作権表示 です。上の二つは連動していまして、現在暫定リリース中なのでd…

dispatch()内部での例外

昨日書いたこの件ですが、m68k実装も現在のBlackfin実装と同様にdispatch()内部での例外を「タスクコンテキストでおきた」と誤認します。これについてTOPPERSのユーザーMLで質問したところ、やはり致命的であり復帰はほとんど不可能だろうと言うコメントをい…

例外ハンドラ周りの修正

例外ハンドラの引数を(void)としていた誤りを見つけましたので修正しました。渡す引数はIPENDのアドレスです。この引数は単に無視されるので修正前のコードを使っても何の問題もありません。