C++中的不间断功能

un-interruptible function in C++

本文关键字:功能 不间断 C++      更新时间:2023-10-16

我有几个函数使用 ioctl 调用通过 SPI 进行异步通信。

这些功能的执行速度非常快,因为数据有效负载只有几个字节 - 但是 - 计时必须不会中断。

我注意到这些功能有时会在CPU为其他线程提供服务时中断 - 这最终会中断异步通信;它会改变时间。

对于这两个函数,我如何指定它们可能不会中断?

我不认为你可以在大多数普通操作系统(如Windows,OsX,linux)上使用常规程序来做到这一点。如果可以的话,那么恶意软件可以通过简单地声明无限循环是不可中断的来锁定您的计算机。可以在设备驱动程序中执行类似操作。如果您确实需要这种级别的控制,则可以使用实时操作系统。

我认为您可以在内核模块的 Linux 中执行此操作。

禁用所有中断既困难又危险(并且可能会破坏内核更新) - 除非绝对必要,否则您应该避免这样做。对于 SPI,您应该依赖处理时序和内核配置的驱动程序,例如 andriod 串行库。

我尝试在微控制器上实现协议和时序(当我需要在两组引脚上同时使用不同速度的不同SPI时)-即使没有多线程问题,也很难达到完美。所以你真的应该问问自己,我应该自己实现低级通信调用吗?

我意识到这实际上并没有回答您关于如何禁用所有中断的问题,但我觉得它同样解决了您的最终目标。