2013年8月2日金曜日

error C249: 'DATA': SEGMENT TOO LARGE, *** ERROR L107: ADDRESS SPACE OVERFLOW

リンカやコンパイラが知らせてくれるエラーコードは、素人にはわかりにくいものです。
しかし、コンパイラなどのツール名と一緒にエラーコードをググれば、いろんな情報を得ることができます。

今日はちょっとした、自分用のメモ(いつも、いつでも自分用ですが)。

ご自身でファームウェアを書いていらっしゃる方は、こんな記事を読まなくても検索するなどしてエラーコードの意味を調べていらっしゃると思いますが、日曜大工ならぬ日曜プログラマの方は、エラーコードの意味を調べてみるといいと思います。

さてさて

CypressのUSBコントローラー、FX2をKeilのuV2でコンパイル。
評価版なので4Kbyteまでのファームウエアしか作れないのです。

で、その制限を超えたらどんな表示が出るのかなー と思って、ちょっとやってみました


output windowに
error C249: 'DATA': SEGMENT TOO LARGE
が出たら、そのソースファイルがでっかすぎる、ということのようです。

ちなみに、上のerror C249は、
#define MAXxyi 64  // iteration times
signed char Xi[MAXxyi];
signed char Yi[MAXxyi];
と書いた時に出たもので、


これを
#define MAXxyi 30  // iteration times
signed char Xi[MAXxyi];
signed char Yi[MAXxyi];

リンカがエラーを出すこともあるようで
*** ERROR L107: ADDRESS SPACE OVERFLOW
となると、個々のソースファイルではもんだいなくても、なんか大きすぎるみたいですね。

このとき、L107といっしょに
*** ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
も出ていました。

さらに
Program Size: data=139.5 xdata=4473 code=3362
Target not created
ということで停止。


で、
#define MAXxyi 24  // iteration times
signed char Xi[MAXxyi];
signed char Yi[MAXxyi];
とすると、

Program Size: data=127.5 xdata=4473 code=3362
と変わらないのに…
Total Code Bytes = 3362
Conversion completed successfully.
"funny-kbd_v2b" - 0 Error(s), 0 Warning(s).
ということで成功裏に終了。

コメントを投稿