C18コンパイラは、ROM修飾子を使用してプログラムメモリ内の変数を許可しますが、Hi-Tech Cは、ハーバードアーキテクチャを最大限に活用することにかなり消極的であるようです。したがって、Hi-Tech Cコンパイラを使用してプログラムメモリにデータバッファを作成する方法はあります(アクセス速度を妥協する準備ができています)。
psectで可能性の兆候を見てきましたが、実用的な実装はありません。
C18コンパイラは、ROM修飾子を使用してプログラムメモリ内の変数を許可しますが、Hi-Tech Cは、ハーバードアーキテクチャを最大限に活用することにかなり消極的であるようです。したがって、Hi-Tech Cコンパイラを使用してプログラムメモリにデータバッファを作成する方法はあります(アクセス速度を妥協する準備ができています)。
psectで可能性の兆候を見てきましたが、実用的な実装はありません。
HI-TECH PICC18コンパイラは、デフォルトで宣言されたオブジェクトconst
をプログラム空間に配置します。C18のRAM
/のような特別な修飾子ROM
は必要ありません。
3.5.3プログラム空間内のオブジェクト
const
オブジェクトは通常、プログラムスペースに配置されます。PIC18デバイスでは、プログラムスペースはバイト幅であり、コンパイラはバイト位置ごとに1文字を格納し、値はテーブル読み取り命令を使用して読み取られます。修飾されたすべてconst
のデータオブジェクトと文字列リテラルは、const
psectに配置されます。RAMとポインタはこの アドレスを使用してROMまたはRAMへのアクセスが必要かどうかを判断するためconst
、psectはRAMの上限を超えるアドレスに配置されます。const
フラッシュのプログラム/消去サイクルの数は限られているため、頻繁に更新されるデータをマイクロコントローラのフラッシュメモリに配置することはあまり良い考えではないことに注意してください。
far
ポインタを使用して、プログラムメモリを逆参照できます。
3.4.12.2ConstおよびFarポインター
const
far
ポインタは16ビット幅または24ビット幅のいずれかです。--CP=24
それらのサイズは、または--CP=16
コマンドラインオプションで切り替えることができます。それらを逆参照するために使用されるコードも、それらのサイズによって異なります。プロジェクト内のすべてのモジュールに同じポインタサイズを使用する必要があります。へのポインタfar
は、へのポインタと同じですが、へのポインタを使用して、保持しているアドレスに書き込むことができるconst
点が異なります。 修飾子はオブジェクトが読み取り専用であることを強制するため、オブジェクトfar
へのポインターをconst
使用して書き込みを行うことはできません。とconst
const
far
16ビット幅のポインタは、すべてのRAM領域とほとんどのプログラムスペースにアクセスできます。逆参照される実行時に、ポインターの内容が調べられます。RAMの上限を超えるアドレスの場合、プログラムスペースはテーブル読み取りまたはテーブル書き込み命令を使用してアクセスされます。RAMの上限を下回るアドレスは、データスペースにアクセスします。ポインタが保持するアドレスconst
がRAM内にある場合でも、RAMの場所は変更されない場合があります。デフォルトのリンカーオプションは常に配置されますconst
データスペースの上限を超えるアドレスにあるデータ。これにより、ポインタで逆参照するときに正しいメモリスペースにアクセスできます。選択したターゲットデバイスに64kバイトを超えるプログラムスペースメモリがある場合、16ビット幅のポインタを使用してアクセスできるのは下位64kバイトのみです。逆参照する必要のあるすべてのプログラムスペースオブジェクトが下位64kバイトにある場合、オブジェクトへの16ビットポインタconst
とfar
オブジェクトを引き続き使用できます。ポインタサイズが小さいほど、必要なRAMが少なくなり、生成されるコードも少なくなるため、可能な限り使用する必要があります。const
とfar
24ビット幅のポインタは、すべてのRAM領域とすべてのプログラムスペースにアクセスできます。逆参照される実行時に、ポインターの内容が調べられます。アドレスのビット番号21が設定されている場合、そのアドレスはRAMアドレスであると見なされます。その後、アドレスのビット番号21は無視されます。ビット番号21がクリアされている場合、アドレスはプログラムスペース内のオブジェクトであると見なされ、テーブル読み取りまたはテーブル書き込み命令を使用してアクセスが実行されます。繰り返しますが、へのポインタを使用したオブジェクトへの書き込みは許可されていませんconst
。24ビットポインタを逆参照する場合、最も重要な実装ビット(ビット番号21)はTBLPTRU
レジスタが上書きされる場合があります。このビットは、PIC18デバイスの構成領域へのアクセスを有効にするために使用できます。手書きのアセンブラコードからテーブルポインタレジスタをロードする場合は、テーブルの読み取りまたは書き込み命令を実行する前に、ビット番号21の状態について何も想定しないでください。
引用はHI-TECHPICC18v9.51マニュアルからのものです。