[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[WitchTech 00798] [Q]64kbyte 以上の rom0 ファイル
- Subject: [WitchTech 00798] [Q]64kbyte 以上の rom0 ファイル
- From: matsuda@koga.co.jp
- Date: Tue, 29 May 2001 18:12:25 +0900
しゅうです。はじめまして。
rom0上に65536byte以上のファイルを作成できずに困っています。
現象再現するソースファイルを文末に付けます。
関連の関数の使い方間違ってますか?
どなたかご指南ください。
よろしくお願いします。
■ソースファイルの動作
65664byteのファイルをcreat()で作成しておき、そこに1byteずつ
値を書き込みます。128byteまでは正常に書き込めるのですが
129byteめを書き込むとclose()から処理が帰ってきません。
wonderswan再起動して、出来上がったファイル情報を見てみると
使用量は65664byteですが、サイズは128byteまでしか増えてません。
雰囲気的に、65664-65536=128byteの、つまりintがオーバーフロー
した分しか書き込めないような感じです。
プログラムがどこまで進んだかを見る為に、232cから文字列を
出力しています。ハイパーターミナルとかで見ながら動作して
もらえると、うれしいです。
■環境
TurboCコンパイラ(witch付属のもの)
FreyaOS ver111
■ソースファイル
#include <stdio.h>
#include <stdlib.h>
#include <sys/bios.h>
#include <sys/comm.h>
#include <sys/key.h>
#include <sys/filesys.h>
#include <fcntl.h>
void
main(int argc, char near *argv[])
{
void debug(void);
/* 通信準備 */
comm_set_baudrate(COMM_SPEED_38400);
comm_open();
comm_set_timeout(0, -1);
/* デバッグ関数 */
debug();
/* 通信解放処理 */
comm_close();
}
/*
//
*/
void
debug(void)
{
int count=0x0201; /* 0x201*128byte=65664byteのファイルを作る */
int i;
FILE far* fp;
unlink("/rom0/dust.dat");
/* 2048byte以上のファイルを作成するために */
if(creat("/rom0/dust.dat", 0x22 /*O_CREAT | O_RDWR*/, count)!=E_FS_SUCCESS){
comm_send_string("Creat failed");
return;
}
/* ファイルオープン */
if((fp=fopen("/rom0/dust.dat", "w"))==NULL){
comm_send_string("cant open");
return;
}
comm_send_string("open");
/* 書き込み(ここまでは正常) */
for(i=0; i<128; i++)
fputc(i, fp);
comm_send_string("wr128byte");
/* 書き込み(129byteめでおかしくなる?) */
fputc('A', fp);
comm_send_string("wr129byte");
/* ファイルクローズ */
fclose(fp);
comm_send_string("close");
}
------------------------------------------------------------
shuuichiro matsuda / matsuda@koga.co.jp
ML Archives