谢谢shuiyan的回答:
通讯的是SPI接口,数据量不大,主要是实时性要求比较强.
ARM为主,单片机为从.单片机通过中断来向ARM发送数据.
现在已经实现了只读或只写(没有同步执行),基本没有错误,但领导要求必需读写同步都要能行!我在用户空间开了两个线程,写线程在需要的情况下执行,而读取的数据要求中断来临后马上要将数据从内核空间拷贝到用户空间,所以我在没有数据来的时候读函数就一直阻塞在内核中断的顶部(中断为底部,数据处理留到顶部,之间采用了工作队列及completion通知机制,),当外部中断来了后,进入驱动的外部中断处理函数,置一标志位,在SPI中断函数里根据此标志位置位否来决定是否为接收到的数据,若是,complete告知顶部,返回用户空间.如此一来即避免了在用户空间轮训查询来读取数据的问题,但是在此种情况下,如果写线程同步执行,则出现了资源的严重竞争(读写函数中有些变量是公用的,在处理上已经枷锁了),且由于写阻塞在 内核中断上文,用户空间程序无法通过ctrl+c来退出程序.
用外部中断来唤醒用户空间的"读",只能阻塞在内核空间了吗? |