PIC32コンパイラオプションの設定

 PIC32でソフトウエアをせっせと書いていたら、ビルド時に

small-data section exceeds 64KB; lower small-data size limit (see option -G)

というエラーが出てきた。対処法は簡単で、XC32のoptionにあるUse GP relative addressing thresholdの値を変えることである。デフォルトが8なのだが、4とか2とか、なし、とかに変更するのである。
 私の場合、なし、にしないと、ビルドできなかった。
 これはこれでいいのだが、このオプションが何なのかがわからないと気持ち悪い。https://microchipdeveloper.com/faq:3434によると、どうやら、MIPSには、64Kバイト以下なら1命令でアクセスできるGP relative addressingというアドレッシングがあるので、小さい単位の変数を、ここに格納するということで、実行時の速度を上げるというようになっているようである。
 デフォルトの8だと、long型でも格納できるので、実数以外の通常の変数は、全てこの領域に格納してしまおう、ということなのだろう。
 私のソフトウエアも、自分の書いたコードは、配列とかstruct以外の変数が全部で64Kバイトを超えるような大きなソフトウエアではない。でも、TCP/IPのスタックとか、マイクロチップ社提供のライブラリーをかなり使っているので、そちらの方で消費してしまうのだろう。
 でもまあ、今開発している機器で、PIC32を選択した理由は、512KバイトのRAMを使えることだったので、このオプションを使えないのは当たり前ということである。

コメントを残す

メールアドレスが公開されることはありません。