(etrobo 12) TOPPERS/JSP を NXT BIOS & C++ で利用するときの問題
INACHI Minoru
inachi-m @ mb.dnes.nec.co.jp
2011年 8月 23日 (火) 14:41:05 JST
チーム名:ギャロップドライブの稲地です。
本MLにはじめて投稿させていただきます。
さっそくですが、TOPPERS/JSP を NXT BIOS & C++ の環境で利用
しようとして、問題にぶつかってしまったので、相談にのって
いただけないでしょうか。
その問題とは転送するバイナリが巨大に膨れ上がって NXT に転送
できないというものです。
以下の C++ 用サンプルプログラムを NXT BIOS 用に make します。
jsp-1.4.4-nxt/OBJ/MINDSTORMSNXT/SAMPLE_CPP
これで出来上がるバイナリのサイズは以下のとおりです。
-rwxr-xr-x 1 XXXXXXXXXXXXX Domain Users 39472 Aug 23 12:44 jsp.bin
sample.cpp に以下のように簡単な C++ オブジェクトを定義します。
=================================================================
--- sample.cpp.orig 2011-03-20 11:08:23.000000000 +0900
+++ sample.cpp 2011-08-23 12:56:26.213365500 +0900
@@ -30,6 +30,15 @@
static char mstate; /* 走行体の状態 */
static char keystate; /* タッチセンサーの状態 */
+class CPPTEST {
+public:
+ CPPTEST() :var(0) {}
+private:
+ int var;
+};
+
+CPPTEST cpptest;
+
//*****************************************************************************
// 関数名 : tail_control
// 引数 : angle (モータ目標角度[度])
=================================================================
これで再コンパイルすると、以下のようにバイナリが 1MB ほどに膨れ
上がり、NXT に転送できなくなります。
-rwxr-xr-x 1 XXXXXXXXXXXXX Domain Users 1018448 Aug 23 12:58 jsp.bin
この現象はグローバルに C++ オブジェクトを定義しなければ発生しません。
手探りで以下のような修正を加えたところ、サイズが膨れ上がる現象は
無くなり、NXT に転送もできて、今のところ動作もしています。
jsp-1.4.4-nxt/config/armv4/mindstormsnxt/
=================================================================
--- mindstormsnxt_rom.ld.orig 2011-05-14 09:34:16.000000000 +0900
+++ mindstormsnxt_rom.ld 2011-08-23 12:05:48.156618200 +0900
@@ -138,9 +138,10 @@
KEEP(* (*.dtors*))
__dtor_end = .;
. = ALIGN(16);
-} > ram
+} > rom
/* ROM_ONLY __rom_end__ = ADDR(.text) + SIZEOF(.text) ; */
+ __rom_end__ = __dtor_end ;
/*
* The stack is placed in ram.
=================================================================
転送するバイナリのサイズは以下のようになりました。
-rwxr-xr-x 1 XXXXXXXXXXXXX Domain Users 39536 Aug 23 13:01 jsp.bin
バイナリが膨れ上がる原因、および上記の対処で大丈夫なものか
アドバイスお願いいたします。