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

Technical Note 180508J

Targets:
ARM

Component:
Linker

Updated:
5/31/2018 9:18 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 ディレクティブを使用する必要があります。

 

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

 

© IAR Systems 1995-2018 - All rights reserved.

We use cookies on this website to provide you with a better experience. You need to accept cookies to continue using this site. Cookies