文章目录
1. 应用程序读取上报事件CPU占用率0%
1.1 问题描述
- 考虑到应用程序使用
while(1)循环read()上报事件,类似于普通按键实验,cpu 占用率拉满 - 并且在正点原子关于 input 子系统实验讲解中,有较多朋友提到 cpu 占用率高
- 加载驱动程序,后台运行测试程序,
top查看应用进程 cpu 占用率约为 0%,几乎不耗费 cpu- 加载按键 input 驱动:
modprobe inputkey - 后台运行测试 APP:
./inputkeyAPP /dev/input/event0 &

- 加载按键 input 驱动:
1.2 现象分析
上报事件可能跟异步通知类似,上报后应用程序 read() 才有效,否则 read() 休眠等待。
debug:
-
在 read() 前打印一串信息提示上报
while(1) { /* 如果 read 不阻塞, 将一直打印 input_event! */ printf("input_event!\r\n"); ret = read(fd, &ievent, sizeof(struct input_event)); .

本文分析了Linux嵌入式驱动中INPUT子系统的问题,包括应用程序在读取上报事件时CPU占用率为0%的现象,以及read()函数出错的情况。在CPU占用率问题上,发现read()可能因等待上报事件而休眠。在read()出错问题中,错误在于将input_event定义为指针而未分配内存,导致数据异常。修正此问题后,数据打印恢复正常,事件判断成功。
最低0.47元/天 解锁文章
1884





