no definition for init routine "__iar_zero_init3が表示される
テクニカル・ノート 180508J
アーキテクチャ:
ARM
コンポーネント:
linker
更新日:
2018/09/04 5:05
はじめに
IAR Embedded Workbench for ARM を7.xにアップデートするとこれまで表示されなかったエラーメッセージ no definition for init routine "__iar_zero_init3” が表示される理由と対処方法について説明します。
解説
IAR Embedded Workbench for ARM v7.50.1 より、初期化のないRAMセクションで、リンカ設定ファイルで明示的に do not initialize のリストにないセクションがある場合、エラーになるようになりました。
(7.50.2 以降の) ILINKのリリースノートに下記のように記述されています。
------------------------------------------------------------------------------------------------------
アプリケーションが純粋にアセンブラ言語で記述されて、ランタイムライブラリが使用されていない場合、リンカファイルにはreadwriteデータを含む各セクションについて、do not initializeディレクティブを含める必要があります。たとえば、次のアセンブラコードは
SECTION variables_section:DATA(2) DATA
var1:DS32 1
var2:DS8 64
次のディレクティブがリンカファイルに存在しなければならないことを意味します:
do not initialize { readwrite section variables_section };
リンカディレクティブが省略されると、リンカはvariables_sectionにゼロで初期化されるデータが含まれると想定し、ランタイムライブラリが使用されないために
Error[Lp001]:no definition for init routine "__iar_zero_init3"
を出力します。
------------------------------------------------------------------------------------------------------
まとめ
IAR Embedded Workbench for ARM v7.50.1 以降では、初期化のないRAMセクションは、リンカ設定ファイルで明示的に do not initialize ディレクティブを使用する必要があります。
全ての製品名は、それぞれの所有者の商標または登録商標です