エラーメッセージ:Segment ISTACK is too long for segment definition
テクニカル・ノート 95811
アーキテクチャ:
8051
コンポーネント:
linker
更新日:
2018/08/26 3:48
はじめに
IAR Embedded Workbench for 8051バージョン8.20以前からバージョン8.30にプロジェクトを移行した後、内蔵RAMに関するリンカエラーe16が突然発生するようになりました。
Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition
説明
プロジェクトをリンクする際、リンカ設定ファイル(.xclファイル)が使用されます。このファイルには、リンカのコマンドが含まれています。
IAR Embedded Workbench for 8051では、このファイルは、プロジェクト(Project) > オプション(Options) > リンカ(Linker) > 設定(Config) > リンカ設定ファイル(Linker configuration file)で確認できます。
一方、バージョン8.30では、_NR_OF_VIRTUAL_REGISTERSというシンボルが廃止されました。
今回のリンカエラーは、この追加サイズによって発生します。
解決方法
プロジェクトで使用されている.xclファイルは、バージョン8.20以前のIAR Embedded Workbench for 8051のファイルであると推測されます。このファイルには、以下の記述が含まれています。
-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F
必要に応じてこのファイルをコピーし、コピー先のファイルでこの行を以下のように変更してください。
-Z(DATA)VREG=08-7F
詳細なバージョンの説明
この変更は、バージョン8.30.1 (品番EW24413)で導入され、バージョン8.30.2のリリースノートに記載されています。
ヒント
テクニカルノート98110で同様の問題を扱っています。