デバイス:MSP430
開発環境:Code Composer Essentials(フリー)
エラー内容:error: placement fails for object “.text”
TI エンジニア・コミュニティ情報:
https://community.ti.com/jp/forums/t/139.aspx
プロダクト・インフォメーション・センター回答:
> 1 リンクマップの調べ方
> ・buildでエラーが出たときは、リンクマップ出力して調べてください。
> ・今回添付された.map では、
> [memory configulation]
> FLASH origin:fc00 length:3e0 used:3c
> [section allocation map]
> .text origine:0000 length 3f4 faild to allocation
>
> ・上記のように
> コード配置されるsection:.text が ”faild…”とエラーを示し、アドレス:0000 のままです。
> 正常ならば FLASH領域に配置されます。
>
> *さらにlength:3f4 ですから FLASHのlength:3e0 を超過してます。
> これに.cinit length:3c が加わります。(.cinitのみ配置された状態です)
>
> *リンクマップをちょっと見ていただくと、どういう構造か解ると思います。
> エラーが起きたときに、調べるとプログラムの状況を把握できます。
>
> *今回は、数十バイトオーバしているだけですので、releaseモードで build すると、
> デバグモジュールがリンクされないので、FLASHに収まってエラーも出ません。
>
> 2 回避策
> ・回避策は、いくつかありますので、どれが良いかご判断お願いします。
>
> ① デバッグプラットフォームは、メモリ容量の大きなデバイスを使用する方法
> ・これが一般的な方法です。
> ・デバッグモードでは、シンボリックデバッグルーチンなどが入るので、releaseより大きな
> プログラムサイズになっていますので、メモリの大きなデバイスを使用します。
> ・デバッグが終了したら、releaseモードにして、ターゲット用のリンクコマンドを選択して
> リンクできるか、メモリ容量に収まるか調べます。
>
> ② コンパイラの最適化(optimaization)を使い、プログラムサイズの縮小を計る方法
> *最適化すると、動作しなくなる場合も出て、スタックや最適化度合いを調整できる、
> 熟練者向きです。 お客様の責任で検討をお願いします。
> ・今回の場合、下記でサイズが削減できます。 スタックは多少増やしてください。
> Project->Properties->Tool Setting->Optimization Level = 2(default)
> その上の speed vs size …. も必要なら検討します。
>
> 3 関連資料
> ・CCEのコンパイラの設定とリンクについては、下記をご参照ください。
> MSP430 Optimizing C/C++ Compiler v 3.1 User’s Guide
> http://focus.tij.co.jp/jp/lit/ug/slau132c/slau132c.pdf
コメント
sugoi