標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第280回]

●RS232C受信プログラムの説明です(3)

前回の補足説明です。
コマンドライン引数のパラメータ指定のところで、前の方では、main(int argn,char *args[])と書いていたのに、途中から、main(int argc,char *argv[])というように、変数名が変わってしまっています。
こういう不統一なことをすると、お読みになる方が迷ってしまってよくありません。

argというのはargumentの略で、「引数」という意味があります。
なので、こういう名前をつけたりするのでしょうね。

もちろん、そういう名前にしなければならない、ということではありません。
こんな感じでもまったく問題はありません。


/// test pointer of character
// command line parameter(2)
// 09.7.16
#include <stdio.h>
//
main(int nanda,char *kanda[])
{
	int i;
	for (i=0;i<nanda;++i)
	{
	printf("%d,%d,%s\n",i,kanda[i],kanda[i]);
	}
}
実行させてみました。

ところで、これも補足説明です。
プログラムを実行すると、文字列のポインタ(文字列の先頭のアドレス)と、その文字列が表示されます。
表示されたポインタの値(十進数で表示されている)をよく見てください。
最初の文字列はファイル名を含んでいて、その他のパラメータとは少し性質が異なりますから、他の文字列とは別の格納場所に入れられているようです。

その他の文字列を見ると、最初の文字列nagasakiのポインタ値は6693380です。
次の文字列waのポインタ値は6693389で、これは6693380に9をプラスした数値になっています。
念のため、その次も見てみましょう。
次の文字列kyomoのポインタ値は6693392で、これは6693389に3をプラスした数値になっています。

いつもこうであるかどうかはわかりませんが、この例では、コマンドライン引数の文字列は先頭のファイル名を含む文字列以外は、連続した記憶場所に格納されていて、その文字列の文字数+1のサイズの記憶場所が確保されているらしいことがわかります。
多分C、C++を多少でもさわったことのある方ならばおわかりかと思います。
文字列の場合には、最後に文字列の終りを示す記号\0(ヌル)が付け加えられることになっているからです。
そのイメージについては、前回[第279回]のこちらの図を見ていただければご理解いただけると思います。

●RS232CプログラムはWindowsAPIを使います

なんだか、道草のそのまた道草になってしまって、ちっとも前に進めません。
とりあえず、プログラムの説明に戻ることにいたします。

RS232C送信プログラム(w232c.exe)も同じですが、RS232C受信プログラム(r232.exe)は、通常のヘッダーファイルstdio.hのほかに、windows.hをインクルードしています。


#include <windows.h>
#include <stdio.h>
windows.hはWindowsで使う多くのAPI(アプリケーション・プログラム・インターフェース)を含むヘッダーファイルです。
コマンドラインで使うだけのプログラムなのですから、Windowsのアプリケーションなど使いたくはないのですが、いろいろ調べてみたところ、どうも手っ取り早い方法としてはこれしかないようです。

WindowsのAPIというのは実に面倒なのですよね。
なんだかわざと難しく書いてあるような、とっつきにくさがあります。
先に作った送信プログラム(w232.exe)は、とにかく送信してしまえばよいので、それほど難しくはなかったのですけれど、受信ということになると、受信バッファはどのくらいのサイズなのだろうか、とか、データをフェッチするタイミングはどうするとよいのだろうか、など、いろいろ疑問がでてきました。

えーと、ですねえ。
目下のところ、大変な作業中です。
「つくるCPU(MYCPU80)」の部品表を作成中なのです。
なにしろ部品点数がベラボーなので、もう汗、アセ、アセーッ、という状態です。
並行して、組立説明の下準備もしています。
ということで、なかなか時間がとれません。

この続きはまた、次回に書くことにいたします。
2009.7.16upload

前へ
次へ

ホームページトップへ戻る