⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 noteofdevdrv.txt

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 TXT
字号:

设备驱动方案

一、系统管理以dev_id_map[]和SYS_DCB[]两个结构管理各个设备。
1、SYS_DCB[]是由以下结构组成的数组:

typedef rom struct _DeivceCtlBlkItem{
	struct _device rom * dev;
	INT8U state;
}DCBI;

定义为:DCBI SYS_DCB[MAX_DEV_NUM];
其中
* dev:指向驱动程序头
state:当前设备状态

设备管理程序组包括如下函数:
	sysdev_init()
	sysdev_load(DEV_HEADER * dev);
	sysdev_clear(INT8U dev_id);
	sysdev_open(INT8U dev_id);
	sysdev_close(INT8U dev_id, INT8U dev_hdl);
	sysdev_write(INT8U dev_hdl, INT8U rom * pd, INT16U len);
	sysdev_read(INT8U dev_hdl, INT8U rom * pd);
	sysdev_ioctl(INT8U dev_hdl, INT16U arg, INT8U mode);
其中后7个程序分别对应DEV_HEADER中的
	void (*dev_init)(void);
	void (*dev_clear)(void);
	void (*dev_open)(void);
	void (*dev_close)(void);
	void (*dev_ioctl)(INT8U cmd, INT16U arg, INT8U mode);
	void (*dev_write)(INT8U rom * pd, INT16U len);
	INT16U (*dev_read)(INT8U rom * pd);

系统初始化时,先以sysdev_init()对设备管理结构初始化,再使用sysdev_load()加载各设备
用户程序在使用设备时,先以sysdev_open()向系统申请设备句柄,以后的所有操作均以设备名柄为基础进行。


2、dev_id_map[]为INT8U数组,用于由设备ID至SYS_DCB[]的对应关系映射。

二、各个设备驱动程式序提供一个设备控制头,定义如下

typedef rom struct _device{
	INT8U ID;					
	INT8U name[3];				
	INT8U property;
	INT8U (*dev_init)(void);
	INT8U (*dev_clear)(void);
	INT8U (*dev_open)(void);
	INT8U (*dev_close)(void);
	INT8U (*dev_ioctl)(INT8U cmd, INT24U arg);
	INT8U (*dev_write)(INT8U rom * pd, INT16U len);
	INT16U (*dev_read)(INT8U rom * pd);
}DEV_HEADER;

其中:
ID:设备ID,每个设备均应不同,其值不应大于MAX_DEV_ID(目前#define MAX_DEV_ID 64)
name[]:设备名,ASCII字符
property:本设备属性,定义如下
	bit0:1-本设备为块设备;0-本设备为字符设备
	bit1:1-本设备可共享;0-本设备不可共享
	
	
INT8U (*dev_init)():设备初始化。完成本地数据初始化、ISR设置以及相关任务及事件的创建,在ISR设置时,应保存设置之前的ISR向量,以便在dev_clear()中恢复。返回0表示成功能,1表示失败
INT8U (*dev_clear)():设备清除(返回值意义同上)
INT8U (*dev_open)():设备打开(返回值意义同上)
INT8U (*dev_close)():设备关闭(返回值意义同上)
INT8U (*dev_ioctl)():设备控制参数写入或读出,操作由“cmd”参数定义,内容为INT24U或指向控制数据的指针“arg”(返回值意义同上),arg为INT24U 或指针,由cmd的值决定
INT8U (*dev_write)():向设备写入数据,参数为写入数据指针及写入的长度(返回值意义同上)
INT16U (*dev_read)():由设备读出数据,参数为缓冲区地址,返回数据字节数


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -