__cplb_ctrl
CPLBはキャッシュを使う場合には無視して通れない仕組みです。このテーブルはメモリー領域ごとにキャッシュ可能性と保護属性を宣言しますのでCPLBを使わなければ全領域がキャッシュ不能になってしまいます。一方で信号処理とかアプリケーションにまったく関係ない設定ビットをいじるのはまったくうんざりします。
これを少し楽にするため、VisualDSP++には __cplb_ctrl*1変数が用意されています。この変数は初期値のみが意味を持つ特殊な変数で、デフォルトでは0の初期値を持ちます。ユーザープログラムが__cplb_ctrlを再宣言すると、リンカーはデフォルトの__cplb_ctrlを捨ててユーザー定義の__cplb_ctrlを使用します。
__cplb_ctrlは初期値のみが意味を持ちます。ユーザーが次のように宣言したとします。
#includeint __cplb_ctrl = // VisualDSP++のヘルプから引用 CPLB_ENABLE_ICPLBS | CPLB_ENABLE_ICACHE;
そうすると、システムの初期化関数はこの変数の初期値を参照してCPLBを設定します。この後実行中に値を変更しても何の意味もありません。変数の初期値には以下の値を使用できます。これらはビットマスクなので、ビットORによって複数を初期値として使用できます。
- CPLB_ENABLE_ICPLBS
- ICPLBを有効にする
- CPLB_ENABLE_ICACHE
- L1命令SRAMをキャッシュにする
- CPLB_ENABLE_DCPLBS
- DCPLBを有効にする
- CPLB_ENABLE_DCACHE
- L1データSRAMのバンクAをキャッシュにする
- CPLB_ENABLE_DCACHE2
- L1データSRAMのバンクBをキャッシュにする
見てわかるとおり、キャッシュとして使用することは指定できますが、どの領域をキャッシュにするかは指定できません。それについてはまた後日。