VisualDSP++のランタイム初期化
C言語の標準ライブラリを使う場合には最低限の初期化を行わなければなりません。現在unix環境構築まで一息ついている状態なので初期化の辺りを調べてみました。
VisualDSP++の標準システムで初期化を行うのは、basiccrt.h(Basic C Runt Time)です。このファイルはリセット直後からmain()関数を呼ぶまで、そしてmain()関数から帰ってからの終了処理を行います。
初期化関数はいくつかありますが、以下の関数はTOPPERS/JSPからは呼ばなくても済みそうです。
- デフォルト割り込みハンドラ設定
- これをされるとTOPPERS/JSPのハンドラが台無しになります。
- FIO支援
- printfなどをシリアルIOで使う機能です。肥大化するので当初は無視します。
- argv, argc取得
- FIOを使うときのサービス機能です。main()が無いため不要です。
- プロファイラ
- 統計的プロファイラがあるのでいらないでしょう。
- プロファイル主導最適化
- ここまでしなくてもとりあえず困りません。
こうして残ったのは次のルーチンです
- _pll_set_system_vco & _pll_set_system_clocks
- PLLの低倍率のほか、CCLK、SCLKの分周比の面倒も見てくれます。ダイレクトにレジスタを扱ったときと違って待ちまで行ってくれるようです。無けりゃ無くても困りませんが便利そうです。
- _mi_initialize
- 初期クリアが必要なメモリーをゼロ・フィルしてくれる関数です。
- ___ctorloop
- C++を使用するとき、C++のクラス・テーブルを初期化してくれます。
以上の関数を呼ぶことで、ライブラリに必要な初期化を行います。