USBマイコンUI-186LK用のプログラムは、 特殊な制御用プログラムであるため、 通常のCプログラムとは異なる点がある。 また、メモリやI/Oデバイスを直接操作するために、 特殊な関数を使用する。
下記の例ではsample.c
を
jikken1.cにコピーしている。
ファイル名は実際に用いたものに読み替えること。
.opt
ファイルをコピーする。
MS-DOSプロンプトでコピーする場合には、
「copy sample.opt jikken1.opt
」を実行する。
sample
というファイル名が3箇所あるので、
jikken1に書き換える。
sample.optを参照。
sample
に関する部分をコピーする
iolib.obj: iolib.c
lch iolib.c $(CFLAGS)
sample.obj: sample.c usblib.h
lch sample.c $(CFLAGS)
sample.heb: sample.obj usblib.obj iolib.obj
lilh @sample.opt
sample.obj: sample.c usblib.h
lch sample.c $(CFLAGS)
sample.heb: sample.obj usblib.obj iolib.obj
lilh @sample.opt
target.obj: target.c usblib.h
lch target.c $(CFLAGS)
iolib.obj: iolib.c
lch iolib.c $(CFLAGS)
sample.obj: sample.c usblib.h
lch sample.c $(CFLAGS)
sample.heb: sample.obj usblib.obj iolib.obj
lilh @sample.opt
jikken1.obj: jikken1.c usblib.h
lch jikken1.c $(CFLAGS)
jikken1.heb: jikken1.obj usblib.obj iolib.obj
lilh @jikken1.opt
target.obj: target.c usblib.h
lch target.c $(CFLAGS)
all:
に新しいファイルを追加する
all: sample.heb target.heb host.exe jikken1.heb
make
」を実行する。
loader jikken1.heb
」を実行する。
main()
関数main()
関数が主プログラムとなるが、
今回はmain()
関数を使用しない。
user_task()
という関数を作ると、
この関数が実行される。
この関数を終了させると暴走するので、
無限ループにしておくこと。
systrap(RQ_PAUSE, time)
関数を用いると、
timemsec待って実行を再開する。
なお、timeは50msec精度で、
最大50msecの誤差がある。
peekb(seg, ofs)
関数を使用する。
pokeb(seg, ofs, data)
関数を使用する。
inport8(addr)
関数を使用する。
outport8(addr, data)
関数を使用する。
int f()
{
int a[2] = {1, 2};
をコンパイルすると、
『未解決の外部参照名「__nmemcpy」があります』というエラーになる。
修正するには、
int f()
{
static int a[2] = {1, 2};
のようにstaticにするか、
int a[2] = {1, 2};
int f()
{
のようにグローバル変数にする。
loader
コマンドでプログラムを実行する。
実行するファイルを指定して、loader sample.heb
-
」 (マイナス) を含めるとエラーになるので要注意。
lch
である。
コンパイル方法はサンプルのmakefileを参照のこと。
多くのオプションを指定する必要があるので要注意。
単にlch FILE.c
とすると、
実行できないファイルができる。
lilh
である。
リンカのオプションはファイルに記載し、ファイル名を指定する。
詳細はサンプル中の.opt
を参照のこと。
最終的には、.heb
ファイルができる。
static
にするか、
関数外で宣言すると良い。
詳細は初期値を持つ配列を参照。
(作成: 2002年10月1日, 最終更新: 2003年11月26日)