ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
11月 02 (金曜日) 2007
22:49
構造体の受け渡し
 
えーっと。

オイラのソースは現在、FDアクセス用のタスクを設置するという方式
でFD読み出しをしています。

でね?

今現在、FD用のタスクの本体はbootpac.cに、そのタスク内からコールする
各種関数はfd.cというファイルにおいてあるんです。
bootpac.c内の本体側でfifoやタイマ。またさまざまな変数設置していて、
それを関数が使うわけです。
この時に渡すパラメータがもう様々でややこしいので、関数に渡すことが
想定される変数を全部本体側で作った構造体(FDTIME)に入れちゃって、
それをまるごと渡しているわけですよ。
だから、fd.c内のほとんどの関数では引数にこのFDTIME構造体があるんです。
・・・でもこれ、なんかだんだん面倒になってきてしまいました・・・

たとえばfd.cの先頭(#includeとかが置かれるあたり)に構造体を
ポインタで宣言しておいて、
(これならこのfd.c内全ての関数から参照できるはず・・・ちがう?)
それをinit(初期化)かなんかで当て込んじゃう・・・
そーゆーふーにできないでしょうかねぇ・・・

実験バージョンで大イジリ開始〜!
 
30日を過ぎたBlogにはコメントできません。
19:17
fopenへの長い道のり
 
fopenはC言語の標準関数のひとつです。(stdio.hで使えるようになる)

fopenをThe-BBLで使えるようにしたい。これがオイラの現在の目標です。

FDアクセスが一段落したのでもっと包括的な関数を作ろうと思っていたのですが、どうもうまくいきません。
(・・・プログラムというより、設計です。どういうふうに組み立てたらいいのか・・・)

そこで一旦上?に上がって、そっち側からすこし勉強してみることにしました。

fopenの仕様


ええと・・・
C言語のfopenはどういう動作をする関数なのでしょうか???
うーん・・・fopen単体で見ていくとかえってややこしそうなことがわかった。
ちょっと一連の動作として勉強してみよう。

テキストファイルを読む


よくあるC言語の入門書ではだいたい以下の感じで説明されてるなぁ。

//まずfopenでファイルを開く
//FILE *fopen(const char *filename, const char *mode);
FILE *fd;
fd = fopen("test.txt","r");
//オープンできなかったらfdにNULLが返るので
//本来ならここにエラー処理を置く

//開いたファイルからfget関数で一文字読み込む
char s;
s = fgetc(fd);

//仕事が終わった。fclose関数でファイルを閉じる
fclose(fd);

//fdはポインタのようだ。
//FILEというのは一種の構造体らしい。


うーーーん・・・・
このFILEというものがよくわからないなぁ。構造体?ストリーム?

とりあえずしばらくは構造体ということで考えて進めていこう・・・

たとえばだけど、このFILEという構造体を自分で設置するとしたらどんな構造になるだろう??

struct FILE {
char filepath[256]; //パス
char filename[256]; //ファイル名
int mode; //リードオンリー等のモード
int filesize; //ファイルの大きさ
int filedate; //日付
int fileparm; //ファイルそのものの属性

int nowpoint; //今どこを読んでいるかの位置
}

とりあえずはこんな感じかなぁ・・・

仮にこうだとして、fopenという関数を妄想するとこういう流れになるのかな??

int *fopen(const char *filename, const char *mode)
{
int err1;
//ルートディレクトリを読み、filenameのファイルを探す
err1 = searchfile(filename); //妄想関数

if ( err1 != 0 )
{
//ないので開けない!
return NULL;
}

//属性その他を検証し、読めるかどうか
err1 = checkfile(filename,mode); //妄想関数

if ( err1 != 0 )
{
//属性他の理由で開けない!
return NULL;
}

//開けるようなので各種情報を読み込む
           :
           :
//集めた情報を構造体に当て込み、その構造体のアドレスを返す
return testFILE;
}


・・・ふうぅむ!
かなり大雑把な妄想だけど、こうして並べてみるといくつかヒントが!?

とりあえずは「xxxxという名のファイルがあるのかないのか?」という
関数が必要のようだ!
ちょっと試作してみようかな???
 
30日を過ぎたBlogにはコメントできません。
09:55
FDアクセス:やっぱムズムズ・・・
 
おは〜。
実は今日は早朝からお仕事の予定だったのですがとある事情で急遽
延期になってしまいました・・・

おもわぬ休日。こんな日は・・・BBLじゃあぁぁぁ! ←ダメ男 orz

昨日のリリースでFD関係は一旦保留かなぁなんて思ってたんですが、
どーーもムズムズしてきまして。

まあ、ぼんやりと飽きが来てるのでとりあえずはチマチマと。

さて、セクタが読めるようにさえなれば、理屈的にはもうなんでも
できるはずです。エラーさえ起きなければ・・・・

そう、エラー処理ですね。
今までは実験等でいい加減に、「俺がわかればいーーんだよ!」と
やってきましたが、複雑化すればするほど、「俺すらわかんねー!」
となりつつありますなぁ。(^^

各所のエラーをもっと厳格に管理して、どこで起こったのか。なぜ
起こったのか。リトライは?などが必要になってきました。

すこし計画立ててキチンと管理することにしましょう。
 
30日を過ぎたBlogにはコメントできません。
00:36
FDアクセス:ちょっとひと区切り
 
えーーーーーーっと!

そんなわけで、とりあえず現時点のバージョンをリリースしました。
Ver.0.03つーところでしょうか。

まだまだ処々問題点があるのですが、とにもかくにも実機で動くっつーことで。

・・・実は少々飽きてきているってのもありまして・・・(^^;

ちょっとビジュアル系?も触りたいので、ひと区切りってとこでしょうかねぇ。
リビジョン60


 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.