こんにちは、井田です。 >伊藤です。 > >外してるかもしれませんが。 >> Section address overflowと表示されている時点で問題ありでしょうか? >問題ありかな。 > >スタックポインタのセクション定義おかしくないですか。 >ML6054では >SPアドレス :0xFFFF00 >スタックサイズ:0x200 >と書いてますが、下記引用では >> >> 0x00FFFD00 S >となってますし。ML6054が誤記? HEW4でセクションの設定で、Sのアドレスが優先的になるようです。 設定で0x00FFFF00 S と設定した時に、「Section address overflow out of range : "S"」 と出た時に、HEW4の構成の編集でスタックの設定を SPアドレス :0xFFFE00 スタックサイズ:0x200 として、コンパイルすると セクションの設定が 0x00FFFC00 S に書き換わるようです。 >MAPとイニシャライズ部分もあったほうが解決しやすいかもしれませんね。 コンパイル後のMAPは下記のようになっています。 開始 終了 $VECT0 0x00000 0x00003 $VECT7 0x0001C 0x0001F : : : $VECT63 0x000FC 0x000FF PResetPRG 0x00400 0x00421 PIntPRG 0x00422 0x00525 P 0x00800 0x15735 C 0x15736 0x1658B C$DSEC 0x1658C 0x16597 C$BSEC 0x16598 0x1659F C$INT D 0x165A0 0x1726D C$VTBL 0x1726E 0x17F97 B 0x200000 0x202D4B R 0x240000 0x240CCD S 0xFFFD00 0xFFFEFF DIntPRG 0xFFFF00 0xFFFF09 イニシャライズ部分は rsetprg.cpp #pragma section ResetPRG __entry(vect=0) void PowerON_Reset(void) { set_imask_ccr((_UBYTE)1); _INITSCT(); _CALL_INIT(); // Remove the comment when you use global class object // _INIT_IOLIB(); // Remove the comment when you use SIM I/O // errno=0; // Remove the comment when you use errno // srand((_UINT)1); // Remove the comment when you use rand() // _s1ptr=NULL; // Remove the comment when you use strtok() HardwareSetup(); // Use Hardware Setup set_imask_ccr((_UBYTE)0); main(); // _CLOSEALL(); // Remove the comment when you use SIM I/O _CALL_END(); // Remove the comment when you use global class object sleep(); } hwsetup.cpp void HardwareSetup(void) { // Initialize routine /* SRAMの初期化 */ P1DDR = 0xff; /*A0〜A7*/ P2DDR = 0xff; /*A8〜A15*/ P5DDR = 0x0f; /*A16〜A19*/ P8DDR = 0x1E; /*CS0〜CS2*/ } main.cpp void main(void) { short int i; /* COM0初期化 */ P9DDR |= 0x05; /*TXD0端子を出力にする。*/ SCI0.SCR.BYTE = 0x00; /* clear all flags */ /* 2400-57600baud are available at n=0(cks0=0,cks2=0) */ SCI0.SMR.BYTE = 0; /* Ascnc, 8bit , NoParity, stop1, 1/1 */ SCI0.BRR = brr; /* 13 : 57600baud (CPU=25MHz) */ for(i=0;i<1000;i++); /* wait more than 1bit time */ SCI0.SCR.BYTE = 0x70; /* scr = 0111 0000 (TIE=0,RIE=1,TE=1,RE=1) */ while (SCI0.SSR.BYTE & 0x80 == 0x00); P4DDR = 0x0F; //Port-4(0〜3)を出力設定 PBDDR = 0xF7; //Port-B(3bit以外)出力設定 //以下にクラスのnew処理 ****A::Create(); //static m_pInstance = new ****A; ****B::Create(); ****C::Create(); ****D::Create(); //継承したクラスの、オーバーライドした関数を実行している部分でダンマリになる。 //クラスの継承部分に問題あり? //継承しない方法で確認中 }