PIC32MX small-data section exceeds 64KB

2016年8月28日

後日談。多分これは、割り込みベクタアドレスなどが入る64kbyte位の小さなセクションに、なぜか普通の変数まで入ってしまうという話でしょう。
ということで、「-G0」で。-Gの意味を調べるのもいいかもしれませ遠が、gccの方を調べることになるのかな?



PIC32MX220F032B でプログラムを書いていたら、リンク時以下のようなエラーが。
pic32mx/bin/ld.exe: small-data section exceeds 64KB; lower small-data size limit (see option -G)
イミフですが、調べてみたところ 64k 以下のセクションに変数が収まりきれないのでリンクできないぞと。
グローバル変数のみの様です。


const BYTE gCharMenu = (“Menu”);
extern const BYTE *gCharMenu;


エラーに気を取られていたけど、これ、配列にしてなくね?
const BYTE gCharMenu[] = (“Menu”);



なんて感じで書いていたらここで引っ掛かりました。
Micorochip のフォーラムにそんな感じの事が書いてありました。
コンパイラが指定したセクションに配置して、リンカでそのセクションをまとめたら死亡らしい。
-G0 オプションを付けるといい。らしい事が書いてあります。英語の難しい文章でまいりました。
で、リンカのオプションかと思っていたら、コンパイラの方でした。
実際、このオプション何してるのかよくわからず。とりあえずは違うセクションに配置したのは間違いないかと。
というか、自分でオプション付けないとだめとか、Microchip 的にいんでしょうか。gcc の仕様とか書いているような無いような(英語で要点じゃないので、さらりとスルーしました)。
とりあえず、このエラーが出たら、盲目的にコンパイラオプションに追加で「-G0」と書きましょう。

PIC32

Posted by saba