我有几个函数使用ioctl调用通过SPI进行异步通信。
这些函数执行起来非常快,因为数据有效负载只有几个字节 - 但是 - 时间不必中断。
我注意到这些函数有时会因为CPU服务其他线程而中断 - 这最终打破了异步通信;它改变了时间。
对于这两个函数,如何指定它们不会被中断?
答案 0 :(得分:1)
我不认为你可以在大多数普通操作系统(如windows,OsX,linux)上使用常规程序。如果可以的话,那么恶意软件就可以通过简单地声明一个无限循环来锁定你的机器。也许可以在设备驱动程序中执行类似的操作。如果你真的需要这种级别的控制,那就有实时操作系统。
我认为您可以在Linux内核模块中执行此操作。
答案 1 :(得分:0)
禁用所有中断既困难又危险(并且可能会破坏内核更新) - 除非绝对必要,否则应该避免这样做。对于SPI,您应该依赖处理时序和内核配置的驱动程序,如andriod串行库。
我已经尝试在微控制器上实现协议和时序(当我在两组引脚上同时需要不同速度的不同SPI时) - 即使没有多线程问题也很难完美。所以你应该问自己,我应该自己实施低级别的沟通电话。
我意识到这实际上并没有回答你关于如何禁用所有中断的问题,但我觉得它完全解决了你的最终目标。