Nios® V プロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 7/08/2024
Public
ドキュメント目次

7.13.4. グローバル・ ポインター・レジスター

グローバル・ポインター・レジスターにより、 Nios® V プログラムのグローバルデータ構造への高速アクセスが可能になります。 Nios® V コンパイラーはグローバルポインターを実装し、それを使用してアクセスするデータ構造を決定します。デフォルトのコンパイラーの動作を変更する場合を除き、何もする必要はありません。

グローバル・ポインター・レジスターは、64 KB の 1 つの連続した領域にアクセスできます。この領域のオーバーフローを回避するために、コンパイラーは小さなグローバルデータ構造を持つグローバルポインターのみを使用します。サイズが指定されたしきい値以下の場合、データ構造は「小さい」と見なされます。デフォルトでは、このしきい値は 8 バイトです。

小さなデータ構造は、小さなグローバル・データ・セクションの .sdata.sdata2、.sbss、および .sbss2 に割り当てられます。小さなグローバル・データ・セクションは、.rwdata セクションと .bss セクションのサブセクションです。

図 14. 小さなグローバル・データ・セクション

小さなグローバルデータ構造の合計サイズが 8 KB を超える場合、これらのデータ構造はグローバルポインター領域からオーバーフローします。リンカーは、「Unable to reach <variable name> ... from the global pointer ... because the offset ... is out of the allowed range, -4096 to 4095.」というエラー メッセージを生成します。

最善の解決策は、サイズが 8 バイト以下のグローバル変数の使用量を減らすことです。もう 1 つの解決策は、頻繁に使用されるグローバル変数のみを .sdata + .sbss 内に配置することです。

グローバル変数のサイズが 8 バイトを超える場合、デフォルトでは、グローバル変数は .sdata + .sbss の外側に配置され、アクセスにより時間がかかります。頻繁に使用されるグローバル変数のみを .sdata + .sbss 内に配置し、8 バイトを超えるグローバル変数を追加できるスペースを残しておくことにより、時空間パフォーマンスを向上させることができます。コードに注釈を付けて、これらのグローバル変数を .sdata + .sbss 内に配置します。

コードへの注釈付けは、詳細配置オプション に表示されます。

プロジェクト設定の操作については、HAL BSP 設定 を参照してください。