+ -
当前位置:首页 → 问答吧 → 求教各位高手.

求教各位高手.

时间:2005-06-01

来源:互联网

我有一个程序似乎有问题,但不知问题所在.求教各位高手指点.急!!!!!
//#define CONFIG_DEVFS_FS

#ifndef __KERNEL__
#  define __KERNEL__
#endif
#ifndef MODULE
#  define MODULE
#endif

#include <linux/config.h>
#include <linux/module.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/init.h>
#include <linux/kernel.h>   /* printk() */
#include <linux/slab.h>   /* kmalloc() */
#include <linux/fs.h>       /* everything... */
#include <linux/errno.h>    /* error codes */
#include <linux/types.h>    /* size_t */
#include <linux/proc_fs.h>
#include <linux/fcntl.h>    /* O_ACCMODE */
#include <linux/poll.h>    /* COPY_TO_USER */
#include <asm/system.h>     /* cli(), *_flags */
#define DEVICE_NAME  "demo"
#define demo_MAJOR 254
#define demo_MINOR 0
static int MAX_BUF_LEN=1024;
static char drv_buf[1024];
static int WRI_LENGTH=0;
/*************************************************************************************/
void init_ADdevice(void)
{
ADCPSR=20;
ADCCON=ADCCON_SLEEP;
}
int GetADresult(int channel)
{
int i=0;
ADCCON=(channel<<2)|ADCCON_ENABLE_START;
//To avoid The first FLAG error case.
//(The START bit is cleared in one ADC clock.)
// while(ADCCON) &1);
for(;i<100;i++);
//To avoid The second FLAG error case
while(!( (ADCCON) & ADCCON_FLAG));
return ADCDAT;
}
static int stop=0;
void* comMonitor(void* data)
{
getchar();
stop=1;
return NULL;
}
/*************************************************************************************/
static ssize_t  demo_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{
while( stop==0 ){
  for(i=0; i<=3; i++){//采样0~3路A/D值
   d=((float)GetADresult(i)*2.5)/1024.0;
   printf("a%d=%f\t",i,d);
   usleep(10);
  }
return = GetADresult(i)
}
/*************************************************************************************/
static int demo_open(struct inode *inode, struct file *file)
{
sprintf(drv_buf,"device open sucess!\n");
printk("device open sucess!\n");
return 0;
}
/*************************************************************************************/
static int  demo_release(struct inode *inode, struct file *filp)
{
MOD_DEC_USE_COUNT;
printk("device release\n");
return 0;
}
/*************************************************************************************/
static struct file_operations demo_fops = {
owner: THIS_MODULE,
read: demo_read,
open: demo_open,
release: demo_release,
};
/*************************************************************************************/
#ifdef CONFIG_DEVFS_FS
static devfs_handle_t  devfs_demo_dir, devfs_demoraw;
#endif
/*************************************************************************************/
static int __init demo_init(void)
{
#ifdef CONFIG_DEVFS_FS
devfs_demo_dir = devfs_mk_dir(NULL, "demo", NULL);
devfs_demoraw = devfs_register(devfs_demo_dir, "0", DEVFS_FL_DEFAULT,
   demo_MAJOR, demo_MINOR, S_IFCHR | S_IRUSR | S_IWUSR,
   &demo_fops, NULL);
#else
int  result;
    SET_MODULE_OWNER(&demo_fops);
    result = register_chrdev(demo_MAJOR, "demo", &demo_fops);
    if (result < 0) return result;
//    if (demo_MAJOR == 0) demo_MAJOR = result; /* dynamic */
#endif
printk(DEVICE_NAME " initialized\n");
return 0;
}
/*************************************************************************************/
static void __exit  demo_exit(void)
{
    unregister_chrdev(demo_MAJOR, "demo");
    //kfree(demo_devices);
printk(DEVICE_NAME " unloaded\n");
}
/*************************************************************************************/
module_init(demo_init);
module_exit(demo_exit);      

作者: cdhebin2003   发布时间: 2005-06-01

你自己不说问题现象,别人怎么帮你?      

作者: 风雪狂客   发布时间: 2005-06-03

热门下载

更多