インテルのみ表示可能 — GUID: qnj1642670556641
Ixiasoft
インテルのみ表示可能 — GUID: qnj1642670556641
Ixiasoft
7.13.4. グローバル・ ポインター・レジスター
グローバル・ポインター・レジスターは、64 KB の 1 つの連続した領域にアクセスできます。この領域のオーバーフローを回避するために、コンパイラーは小さなグローバルデータ構造を持つグローバルポインターのみを使用します。サイズが指定されたしきい値以下の場合、データ構造は「小さい」と見なされます。デフォルトでは、このしきい値は 8 バイトです。
小さなデータ構造は、小さなグローバル・データ・セクションの .sdata、 .sdata2、.sbss、および .sbss2 に割り当てられます。小さなグローバル・データ・セクションは、.rwdata セクションと .bss セクションのサブセクションです。
小さなグローバルデータ構造の合計サイズが 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 設定 を参照してください。