マイクロテクニカ製品サポートFAQ
[一覧] [1つ前に戻る] [マニュアル及び各種ダウンロードページへ]
IRP Bit must be set manually for indirect access to〜の警告について
PIC16Fシリーズの場合には最大で4つのバンクからなるバンク構成のため適宜これらのバンクを切り替えながら使う必要があり、長い配列を使う時次の点に注意する必要があります。
PIC16Fシリーズで長い配列や多くの変数を使う場合には次の要点を理解し警告内容を精査する必要があります。

PIC16Fシリーズのマイコンではデータメモリへのアクセス(配列や変数に使うメモリ)には「直接アドレッシング」と「間接アドレッシング」の2つがあります。

直接アドレッシングの場合には、マイコンのSTATUSレジスタにあるバンク指定用のビットに直接値を入れてバンクを指定します。

間接アドレッシングの場合にはFSRレジスタにアドレス値を設定して、INDFレジスタを経由して間接的にデータメモリにアクセスをします。この方法の場合、バンクの指定はSTATUSレジスタにあるIRPビットとFSRレジスタの最上位ビットの2ビットで指定することになります。

「IRP Bit must be set manually for indirect access to〜」という警告が表示される場合、このバンク切り替えで問題が発生していることを通知しています。IRPビットは間接アクセスする場合のバンク切り替えに使うビットですが、mikroCはIRPビットをセットすることができません。そのためバンク切り替えが必要な時これをセットできないのでマニュアルでセットしないといけない、という警告となります。

IRP=0 -> Bank 0,1
IRP=1 -> Bank 2,3

回避方法としては、次の2つがありますが1番の方法は最適とは言えません。
可能であれば2の方法をすることをメーカーも推奨しています。

1."absolute"ディレクティブを使用して配列や変数をバンク0か1に配置する。
2.PIC16に代わってPIC18を使用する。

PIC18Fシリーズにはバンクの概念がないため、要素数の大きな配列や多くの変数を使うプログラムに適しています。もし手動での設定ができないような内容のプログラムであれば、そのプログラムはPIC16Fシリーズで作れる範囲を超えていることになりますのでPIC18Fに乗り換える必要があるということになります。

オリジナル - FAQみたいです - 猫でいいです