no definition for init routine "__iar_zero_init3が表示される

テクニカル・ノート 180508J

アーキテクチャ:

ARM

コンポーネント:

linker

更新日:

9/4/2018 5:05 AM

はじめに

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 ディレクティブを使用する必要があります。

 

全ての製品名は、それぞれの所有者の商標または登録商標です

 

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。