当前位置:  技术问答>嵌入式网络编程与非嵌入式网络编程有什么不同 iis7站长之家

嵌入式系统字符驱动程序(应用)问题(初学),请帮忙回答

    来源: 互联网  发布时间:2015-07-13

    本文导语:  我要做的是把一个字符设备的驱动程序加载到arm开发板上,我已经通过交叉编译,并且也已经把程序下载到开发板上了,自己写了一个很小的测试程序 main() { int buf[10]; int fd = open("/dev/s3c2410-ts",0); if(-1==fd) print...

我要做的是把一个字符设备的驱动程序加载到arm开发板上,我已经通过交叉编译,并且也已经把程序下载到开发板上了,自己写了一个很小的测试程序
main()
{
int buf[10];

int fd = open("/dev/s3c2410-ts",0);
if(-1==fd)
printf("Can't open TS!");
while(1)
{
read( fd,buf,10);
for( int i=0; ix = BUF_TAIL.x;
ts_ret->y = BUF_TAIL.y;
ts_ret->pressure = BUF_TAIL.pressure;
tsdev.tail = INCBUF(tsdev.tail, MAX_TS_BUF);
spin_unlock_irq(&(tsdev.lock));

return sizeof(TS_RET);
}


static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{
TS_RET ts_ret;

retry: 
if (tsdev.head != tsdev.tail) {
int count;
count = tsRead(&ts_ret);
if (count) copy_to_user(buffer, (char *)&ts_ret, count);
return count;
} else {
if (filp->f_flags & O_NONBLOCK)
return -EAGAIN;
interruptible_sleep_on(&(tsdev.wq));
if (signal_pending(current))
return -ERESTARTSYS;
goto retry;
}

return sizeof(TS_RET);
}

#ifdef USE_ASYNC
static int s3c2410_ts_fasync(int fd, struct file *filp, int mode) 
{
return fasync_helper(fd, filp, mode, &(tsdev.aq));
}
#endif

static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)
{
poll_wait(filp, &(tsdev.wq), wait);
return (tsdev.head == tsdev.tail) ? 0 : (POLLIN | POLLRDNORM); 
}

static inline void start_ts_adc(void)
{
adc_state = 0;
mode_x_axis();
start_adc_x();
}

static inline void s3c2410_get_XY(void)
{
if (adc_state == 0) { 
adc_state = 1;
disable_ts_adc();
y = (ADCDAT0 & 0x3ff); 
mode_y_axis();
start_adc_y();
} else if (adc_state == 1) { 
adc_state = 0;
disable_ts_adc();
x = (ADCDAT1 & 0x3ff); 
tsdev.penStatus = PEN_DOWN;
DPRINTK("PEN DOWN: x: %08d, y: %08dn", x, y);
wait_up_int();
tsEvent();
}
}

static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg)
{
#if 0
DPRINTK("Occured Touch Screen Interruptn");
DPRINTK("SUBSRCPND = 0x%08lxn", SUBSRCPND);
#endif
spin_lock_irq(&(tsdev.lock));
if (tsdev.penStatus == PEN_UP)
  s3c2410_get_XY();
#ifdef HOOK_FOR_DRAG
else
  s3c2410_get_XY();
#endif
spin_unlock_irq(&(tsdev.lock));
}

static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg)
{
#if 0
DPRINTK("Occured Touch Screen Interruptn");
DPRINTK("SUBSRCPND = 0x%08lxn", SUBSRCPND);
#endif
spin_lock_irq(&(tsdev.lock));
if (tsdev.penStatus == PEN_UP) {
  start_ts_adc();
} else {
  tsdev.penStatus = PEN_UP;
  DPRINTK("PEN UP: x: %08d, y: %08dn", x, y);
  wait_down_int();
  tsEvent();
}
spin_unlock_irq(&(tsdev.lock));
}

#ifdef HOOK_FOR_DRAG
static void ts_timer_handler(unsigned long data)
{
spin_lock_irq(&(tsdev.lock));
if (tsdev.penStatus == PEN_DOWN) {
start_ts_adc();
}
spin_unlock_irq(&(tsdev.lock));
}
#endif

static int s3c2410_ts_open(struct inode *inode, struct file *filp)
{
tsdev.head = tsdev.tail = 0;
tsdev.penStatus = PEN_UP;
#ifdef HOOK_FOR_DRAG 
init_timer(&ts_timer);
ts_timer.function = ts_timer_handler;
#endif
tsEvent = tsEvent_raw;
init_waitqueue_head(&(tsdev.wq));

MOD_INC_USE_COUNT;
return 0;
}

static int s3c2410_ts_release(struct inode *inode, struct file *filp)
{
#ifdef HOOK_FOR_DRAG
del_timer(&ts_timer);
#endif
MOD_DEC_USE_COUNT;
return 0;
}

static struct file_operations s3c2410_fops = {
owner: THIS_MODULE,
open: s3c2410_ts_open,
read: s3c2410_ts_read,
release: s3c2410_ts_release,
#ifdef USE_ASYNC
fasync: s3c2410_ts_fasync,
#endif
poll: s3c2410_ts_poll,
};

void tsEvent_dummy(void) {}
#ifdef CONFIG_PM
static int s3c2410_ts_pm_callback(struct pm_dev *pm_dev, pm_request_t req, 
   void *data) 
{
    switch (req) {
case PM_SUSPEND:
tsEvent = tsEvent_dummy;
break;
case PM_RESUME:
tsEvent = tsEvent_raw;
wait_down_int();
break;
    }
    return 0;
}
#endif

#ifdef CONFIG_DEVFS_FS
static devfs_handle_t devfs_ts_dir, devfs_tsraw;
#endif
static int __init s3c2410_ts_init(void)
{
int ret;

tsEvent = tsEvent_dummy;

ret = register_chrdev(0, DEVICE_NAME, &s3c2410_fops);
if (ret 

    
 
 

您可能感兴趣的文章:

  • 驱动程序开发和嵌入式开发有什么联系吗?
  • 请问要想开发嵌入式Linux系统的驱动程序需要哪些基础知识??
  • 嵌入式系统开发驱动程序,面视问题~!
  • 各位老大,你们是从哪些方面改进网卡驱动程序的效率,欧现在写了一个lan91c嵌入式网卡的驱动,需要帮助
  • 关于嵌入式驱动程序的问题。
  • 初学者提问,关于嵌入式linux的硬件平台及其报价
  • 初学者看<<嵌入式Linux应用开发完全手册>>这本书怎么样?
  • <新手>初学嵌入式qt看什么书籍好?
  • 关于初学嵌入式的一些问题
  • 初学嵌入式Linux一些建议性问题
  • 嵌入式初学者想买个ARM9的板子,大家帮忙介绍一下啊。
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?《Linux下的c编程》《嵌入式系统C编程》那个更适合初学者?各是那个出版社的?(
  • 初学者如何学习嵌入式linux啊?请过来人给点宝贵的建议吧,百分奉上!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问在哪下载嵌入式Linux开发平台???想学嵌入式开发!!!
  • 有谁做过嵌入式 Linux开发?是否有嵌入式Linux的JVM?
  • 嵌入式网络编程与非嵌入式网络编程有什么不同
  • 问一个弱弱的问题:做嵌入式开发,宿主机的Linux版本一定要跟目标机上的嵌入式Linux版本一致么?
  • 我怎么糊涂了:想开发嵌入式系统(目标机采用UCLINUX嵌入式操作系统),在RED HAT LINUX下开发,选用什么工具呢?QT还是qt embedded?
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • 关于“嵌入式Linux”
  • 请问什么是嵌入式数据库?(空)
  • 嵌入式系统的学习
  • 嵌入式学习方法
  • 请问:构建一个嵌入式开发环境时的疑问?
  • linux 嵌入式开发用买开发板吗?
  • 求嵌入式Linux的入门书籍!
  • 嵌入式应用开发协作系统 Yocto
  • 嵌入式系统的C运行库 Newlib
  • 嵌入式GLIBC EGLIBC
  • 嵌入式 syslog
  • vc++与Linux嵌入式
  • 计算机专业学习 嵌入式可以么 ??
  • 嵌入式软件下面有哪些具体的研究方向?细分一下 求指点!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3