【发布时间】:2013-08-15 12:16:09
【问题描述】:
目前,我在嵌入式 linux 设备(版本 2.6.28.10)上有一个用户空间应用程序,它切换 GPIO 引脚来控制一些自定义硬件。对 GPIO 寄存器的写入来自单独的pthreads,所有这些都需要访问设备。大多数情况下这工作正常,因为有一个semaphore 阻止多个线程访问同时执行 GPIO 写入的部分。
问题是在写入这些 GPIO 寄存器的过程中(大约 24 个 8 位写入)另一个线程 will interrupt 当前线程虽然中断线程由于信号量无法修改寄存器,但没有返回控制到正在写入 GPIO 几毫秒的线程,这当然会使发送到外部设备的数据无效。
linux中有没有方法可以保证这组GPIO的写入(总共大约50usecs)不被其他线程打断?
【问题讨论】:
-
令我震惊的是,这是一个需要内核驱动程序的完美示例……我不知道什么可以保证此功能。提高线程优先级会有所帮助,但这不是保证。
-
这甚至是来自内核驱动程序的保证吗?我认为即使是内核驱动程序中的一段代码也有可能被中断。
-
在内核驱动程序中,您可以锁定其他线程正在切换,是的。
标签: c linux scheduling embedded-linux atomic