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

📄 funcdevman.c

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

#define MAX_DEV_NUM	20
#define MAX_DEV_ID	64

#pragma romdata EXTRAM
DCBI SYS_DCB[MAX_DEV_NUM];
INT8U rom dev_id_map[MAX_DEV_ID];

void sysdev_init(void){
	INT8U i;
	for(i=0;i<MAX_DEV_NUM; i++){
		SYS_DCB[i].dev = (DEV_HEADER *)NULL_PTR;
		SYS_DCB[i].state = 0;
	}
	for(i=0;i<MAX_DEV_ID; i++){
		dev_id_map[i] = 0xff;
	}
}

INT16U sysdev_load(DEV_HEADER * dev){
	INT8U i;
	INT16U (*dev_init)(void);

	//Find a idle DCB
	for(i=0; i<MAX_DEV_NUM;i++){
		if(SYS_DCB[i].dev == (DEV_HEADER *)NULL_PTR){
			break;
		}
	}
	if(i == MAX_DEV_NUM){
		return(1);
	}
	SYS_DCB[i].dev = dev;
	SYS_DCB[i].state = 0;
	dev_id_map[dev->ID] = i;

	dev_init = dev->dev_init;
	(*dev_init)();
	return(0);
}

INT16U sysdev_open(INT8U dev_id){
	INT8U i;
	INT16U(*dev_open)(void);

	if(dev_id>MAX_DEV_ID) return(0xff);
	i=dev_id_map[dev_id];
	if(i == 0xff) return(0xff);
	dev_open = SYS_DCB[i].dev->dev_open;
	(*dev_open)();
	return(i);
}

INT16U sysdev_write(INT8U dev_hdl, INT8U rom * pd, INT16U len){
	if(dev_hdl >MAX_DEV_NUM) return(0xff);
	(*(SYS_DCB[dev_hdl].dev->dev_write))(pd,len);
	return(0);
}

INT16U sysdev_read(INT8U dev_hdl, INT8U rom * pd, INT16U len){
	INT16U i;
	if(dev_hdl >MAX_DEV_NUM) return(0);
	i=(*(SYS_DCB[dev_hdl].dev->dev_read))(pd, len);
	return(i);
}

INT16U sysdev_ioctl(INT8U dev_hdl, INT8U cmd, INT24U arg){
	INT8U i;
	if(dev_hdl >MAX_DEV_NUM) return(0);
	i = (*(SYS_DCB[dev_hdl].dev->dev_ioctl))(cmd, arg);
	return(i);
}

INT16U FNull_1(void){
}

⌨️ 快捷键说明

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