初めまして。H8/300H初心者のeqpredと申します。トラ技12月号を見て、 秋月のAKI-3069F/LANボードを使い始めました。トレーニングのために 次のようなUDPで通信するプログラムを書いたのですが、sprintfを使う とプログラムが動かなくなります。問題を解決するためのアドバイスを 頂けないでしょうか。よろしくお願いいたします。 [状況] (1)下記のプログラムをコンパイル後、3069ボードのRAMに転送し、 H8/OS >exec ffde40 を入力すると、 H8/OS >exec ffde40Welcome to the H8 Monitor!! H8/OS > となって終了してしまう(?)。 この時、当然pingには応答しない。 (2)sendtick内のsprintfをすぐ下のstrcpyで置き換えてコンパイルし実行す ると、正常動作してサーバ側では"1"というメッセージを検出する。 (3)どちらの場合でも、コンパイル、リンク、転送時にエラーは出ない。 [3069ボード側のプログラム] #include <h8/reg3067.h> #include <h8/syscall.h> #include <h8/printf.h> #include <string.h> #define PORT 6666 /* 使用ポート番号 */ int tick; /* カウンタ変数 */ /* UDP 割り込み処理 */ int udp(unsigned short port, struct sockaddr_in *addr) { return 0; } /* サーバにカウンタ値を送る */ int sendtick( int t) { char tc[4]; /* 文字バッファ */ struct sockaddr_in addr; /* アドレス構造体 */ addr.sin_familly = AF_INET; /* INETドメイン */ addr.sin_port = PORT; /* 使用するポート */ addr.sin_addr = IPADDR(192,168,181,94); /* サーバアドレス */ set_udpaddr( &addr, PORT); /* アドレス構造体を設定 */ /*---- 問題の個所 2002/11/25 (ここから) ----*/ /* sprintfではうまく動かず! */ sprintf( tc, "%d", t); /* カウンタ値を文字に変換 */ /* strcpyなら動く! */ //strcpy(tc,"1"); /* 文字を直接書く */ /*---- (ここまで) ----*/ udp_write( tc, strlen(tc)); /* 文字数だけ送信 */ } /* メイン */ int main(void) { tick = 0; /* カウンタ初期化 */ ether_init(0x200000); /* イーサ初期化 */ if ( get_ether_status() == 0) /* 初期化失敗なら */ return -1; /* 強制終了 */ ip_setup( IPADDR(192,168,181,230), IPADDR(255,255,255,0)); /* 3069Fボードのアドレス設定 */ udp_regport( udp); /* 割り込み処理関数の登録 */ while( 1) { /* 無限ループ */ sendtick( tick); /* カウンタ値を送信 */ sleep(10); /* 1秒待つ */ tick++; /* カウントアップ */ } } [購入ボード] 秋月電子製3069F/LANボード 16MビットRAM付き [使用環境] 開発PC Compaq Armada M300 (mobile-PenIII 500MHz), 512MB 開発OS RedHat Linux 7.3 コンパイラ/ツールなど h8300-hms-gcc-3.0.2-1 h8300-hms-binutils-2.11.2-1 H8/OS ver2.5 (キット付属のもの) [コンパイルに使うMakefile] PROGS = cl.mot CFLAG = -O -mh -g -mint32 OS = /home/development/h8/h8os/kit/h8_os all: $(PROGS) cl.mot: cl h8300-hms-objcopy -O srec cl.coff cl.mot chmod -x cl.mot rm cl.coff cl: cl.c h8300-hms-gcc $(CFLAG) -T $(OS)/ram3068.x -nostartfiles $(OS)/crt/ramcrt0.S cl.c -o cl.coff -lc clean: rm cl.mot *~ __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/