- 论坛徽章:
- 0
|
回复 14# Dsheng
内核版本是2.6.32
单个线程是能够及时响应的,如果添加另外的线程,响应事件的这个线程就会出现事件丢失现象。如果创建的是普通线程create_normal_pthread,就不会丢失。但是,要求又不能是普通线程,必须是实时线程,并有自己的优先级表。
create_pthread(&atid, SCHED_FIFO, 30,(start_r)FUNC1)//线程1用来响应中断事件
create_pthread(&btid, SCHED_FIFO, 15,(start_r)FUNC2)//线程2仅是执行一些加减运算
其中线程1中:
fd = open("/dev/input/event4", O_RDONLY); //event4为注册的input事件
...
while(1)
{
...
read(fd,&buf,sizeof(struct input_event));
code = buf.code;
switch(code)//判断输入事件是否是中断事件
case KEY_F1://假设KEY_F1就是输入的中断事件
test = test^1;
ioctl(fd_test,test);//调用测试GPIO驱动响应(fd_test只是为了用方便测量响应是否满足要求,当有中断事件发生时,相应GPIO状态翻转,方便用示波器测量)
...
}
丢失事件的现象貌似是有规律的,基本上正常响应两百多个中断后就会丢失10个左右的中断,然后又回复正常,依次循环。
谢谢!
|
|