__cplb_ctrl

CPLBはキャッシュを使う場合には無視して通れない仕組みです。このテーブルはメモリー領域ごとにキャッシュ可能性と保護属性を宣言しますのでCPLBを使わなければ全領域がキャッシュ不能になってしまいます。一方で信号処理とかアプリケーションにまったく関係ない設定ビットをいじるのはまったくうんざりします。
これを少し楽にするため、VisualDSP++には __cplb_ctrl*1変数が用意されています。この変数は初期値のみが意味を持つ特殊な変数で、デフォルトでは0の初期値を持ちます。ユーザープログラムが__cplb_ctrlを再宣言すると、リンカーはデフォルトの__cplb_ctrlを捨ててユーザー定義の__cplb_ctrlを使用します。
__cplb_ctrlは初期値のみが意味を持ちます。ユーザーが次のように宣言したとします。

#include 
int __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をキャッシュにする

見てわかるとおり、キャッシュとして使用することは指定できますが、どの領域をキャッシュにするかは指定できません。それについてはまた後日。

*1:__cplb_ctrlはC/C++言語での名前で、アセンブリ言語では___cplb_ctrl