[H8-ML(6058)] Re:3069でROM 起動時にダンマリ?
From: ida@xxxxxxxxxxxxxxxxxxxx
Date: 2006年08月28日(月)14時54分49秒
こんにちは、井田です。

>伊藤です。
>
>外してるかもしれませんが。
>> 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();
	
	//継承したクラスの、オーバーライドした関数を実行している部分でダンマリになる。
  //クラスの継承部分に問題あり?
  //継承しない方法で確認中

}

スレッド概略
[6040(R)](起点)
 └[6057(U)]
   └[表示中]
     └[6059(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]