CodeWarrior for Microcontrollers Special Edition のコードサイズ制限を調べた [CodeWarrior]
Simさんの所で 無償版コンパイラのコードサイズ制限を調べるプログラムを作成していただいたので、 CodeWarriorでも調べてみました。
DATAセグメントだけが大きい場合
Simさんによると、TIのCode Composer Essentials (CCE)では、 問題なくコンパイルできたケースだそうです。
#include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ static const char x[0x8000] = {1}; void main(void) { int i; EnableInterrupts; /* enable interrupts */ /* include your code here */ PTAD_PTAD7 = 1; PTADD_PTADD7 = 1; for (;;){ for (i = 0; i < sizeof(x); i++) { PTAD_PTAD7 ^= x[i]; __RESET_WATCHDOG(); /* feeds the dog */ } } /* loop forever */ /* please make sure that you never leave main */ }
実験に使用したマイコンは、MC9S08LC60です。 これをコンパイルすると、リンカがエラーメッセージを出しました。
Link Error : L4025: This limited version allows only 32768 bytes of C code Link Error : Link failed
どうやら、Cで生成したコードのサイズに32Kバイトの制限がかかっているようで、 textセグメントのサイズでは無いようです。 アドレス・マップは、こんな具合になっています。
********************************************************************************************* SECTION-ALLOCATION SECTION Section Name Size Type From To Segment --------------------------------------------------------------------------------------------- .init 132 R 0x1870 0x18F3 ROM .startData 14 R 0x18F4 0x1901 ROM .rodata 32768 R 0x1902 0x9901 ROM .text 47 R 0x9902 0x9930 ROM .copy 2 R 0x9931 0x9932 ROM
という結果が出てしまったので、二つ目の実験は行っておりません。
CCEと言われると、Component Creation Editionを思い出してしまう。
はやっ。さすがですね。
最初は配列をつけるだけでいいかと思ったのですが、アクセスしていない配列は消されてしまうみたいなので、順にアクセスするコードにしました。
コンパイラによって出力するコードに癖があるのがおもしろいですね。興味がわいてきました。
by Sim (2008-06-23 21:53)