連載
ドライバ開発とネットワークプログラミング:T-Engineプログラミング入門(4)(4/6 ページ)
ドライバの作成と複数のモジュールからなるアプリ開発およびネットワークプログラミングについて解説する
リスト1 7セグメントLEDドライバ(T-Kernelベース)led.c
/*
7セグメントLEDドライバ
デバイス名: "led"
データ番号 -100: 7セグメントLEDに値(1バイト:0〜99)を表示 (ライトのみ)
*/
#include <tk/tkernel.h>
#include <device/sdrvif.h> /* 単純デバイスドライバインタフェース */
/* リード関数: 読込処理 */
INT read_fn( ID devid, INT start, INT size, VP buf, SDI sdi )
{
return E_PAR; /* リードは不可(パラメータエラー) */
}
/* ライト関数: 書込処理 */
INT write_fn( ID devid, INT start, INT size, VP buf, SDI sdi )
{
if (start == -100 && size == 1) { /* 7セグメントLEDに値(0〜99)を表示 */
int p[] = {0x24, 0x3f, 0x62, 0x2a, 0x39, 0xa8, 0xa0, 0x3e, 0x20, 0x28 };
int x = *(B*)buf;
if (x < 0 || x > 99) return E_PAR; /* 範囲外の値はパラメータエラー */
out_h( 0x16100002, p[x / 10] ); /* 10の位の表示 */
out_h( 0x16100000, p[x % 10] ); /* 1の位の表示 */
return 1;
} else return E_PAR; /* それ以外のデータ番号はパラメータエラー */
}
/* メイン関数: ドライバ登録処理 */
ER main( INT ac, UB *av[] )
{
static SDI sdi;
static SDefDev ddev = { NULL, "led", 0, 0, 0, 1,
NULL, NULL, read_fn, write_fn, NULL };
if ( ac >= 0 ) { /* ロード時 */
return SDefDevice( &ddev, NULL, &sdi ); /* デバイス登録 */
} else { /* アンロード時 */
return E_NOSPT; /* サポートしない */
}
}
| リスト1 7セグメントLEDドライバ(T-Kernelベース)led.c |
Copyright © ITmedia, Inc. All Rights Reserved.