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日)