对按键的几种操作方式
来源:互联网 发布:js ajax跨域的解决办法 编辑:程序博客网 时间:2024/05/22 17:24
一、查询方式
在应用程序中直接使用while(1)死循环对按键的状态进行读取,这种方式所占的CPU很多,不推荐使用。
驱动:
ssize_t second_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos){/* 返回4个引脚的电平 */unsigned char key_vals[4];int regval;if (size != sizeof(key_vals)) //这句话的意思是如果上层的buff没有sizeof(key_val)的话,就会错误返回,表示上层会接受四个按键的状态return -EINVAL;regval = *gpfdat;key_vals[0] = (regval & (1<<1)) ? 1 : 0;key_vals[1] = (regval & (1<<4)) ? 1 : 0;key_vals[2] = (regval & (1<<2)) ? 1 : 0;key_vals[3] = (regval & (1<<0)) ? 1 : 0;copy_to_user(buf, key_vals, sizeof(key_vals));return sizeof(key_vals);}
app:
while (1){read(fd, key_vals, sizeof(key_vals));if (!key_vals[0] || !key_vals[1] || !key_vals[2] || !key_vals[3]){printf("%04d key pressed: %d %d %d %d\n", cnt++, key_vals[0], key_vals[1], key_vals[2], key_vals[3]);}}
下面是cpu的占用情况:
Mem: 6348K used, 54848K free, 0K shrd, 0K buff, 2008K cachedCPU: 12% usr 87% sys 0% nice 0% idle 0% io 0% irq 0% softirqLoad average: 0.50 0.15 0.05 PID PPID USER STAT VSZ %MEM %CPU COMMAND 776 767 0 R 1308 2% 99% ./seconddrvtest 777 767 0 R 3096 5% 0% top 767 1 0 S 3096 5% 0% -sh 1 0 0 S 3092 5% 0% init 759 2 0 SW< 0 0% 0% [rpciod/0] 6 2 0 SW< 0 0% 0% [khelper] 742 2 0 SW< 0 0% 0% [kmmcd] 2 0 0 SW< 0 0% 0% [kthreadd] 3 2 0 SWN 0 0% 0% [ksoftirqd/0] 4 2 0 SW< 0 0% 0% [watchdog/0] 5 2 0 SW< 0 0% 0% [events/0] 55 2 0 SW< 0 0% 0% [kblockd/0] 56 2 0 SW< 0 0% 0% [ksuspend_usbd] 59 2 0 SW< 0 0% 0% [khubd] 61 2 0 SW< 0 0% 0% [kseriod] 73 2 0 SW 0 0% 0% [pdflush] 74 2 0 SW 0 0% 0% [pdflush] 75 2 0 SW< 0 0% 0% [kswapd0] 76 2 0 SW< 0 0% 0% [aio/0] 707 2 0 SW< 0 0% 0% [mtdblockd]
可以看到这个程序占了99%的资源。
- 对按键的几种操作方式
- 模拟按键操作的几种方式
- Android随笔之——模拟按键操作的几种方式
- 2、Linux下实现按键驱动的几种方式
- win32相关对共享资源操作几种方式
- js 对DIV的几种操作
- 几种对栈操作的方法
- C# 剪切板操作的几种方式
- Java 文件操作的几种方式
- JDBC操作数据库的几种方式。
- android操作XML的几种方式
- android操作XML的几种方式
- VC 操作Excel的几种方式
- 几种多线程的操作方式
- mybati 批量操作的几种方式
- android操作XML的几种方式
- android操作XML的几种方式
- 文件操作的几种方式
- 修复SVN错误:Revision file lacks trailing newline
- Ubuntu下中文输入法
- 静态链表
- C++ 数据类型的表示范围
- VB.NET数组下标问题 惊现某博文重大错误
- 对按键的几种操作方式
- {linux系统应用}之nc(netcat)瑞士军刀
- PHPMailer 发送邮件
- 错排计数
- POj1003解题tip
- usb host
- 马拉松冠军的项目管理之道
- Java学习笔记(2013年03月23日)
- cocos2d-x游戏摇杆的实现方法