C++中的不间断功能
un-interruptible function in C++
我有几个函数使用 ioctl 调用通过 SPI 进行异步通信。
这些功能的执行速度非常快,因为数据有效负载只有几个字节 - 但是 - 计时必须不会中断。
我注意到这些功能有时会在CPU为其他线程提供服务时中断 - 这最终会中断异步通信;它会改变时间。
对于这两个函数,我如何指定它们可能不会中断?
我不认为你可以在大多数普通操作系统(如Windows,OsX,linux)上使用常规程序来做到这一点。如果可以的话,那么恶意软件可以通过简单地声明无限循环是不可中断的来锁定您的计算机。可以在设备驱动程序中执行类似操作。如果您确实需要这种级别的控制,则可以使用实时操作系统。
我认为您可以在内核模块的 Linux 中执行此操作。
禁用所有中断既困难又危险(并且可能会破坏内核更新) - 除非绝对必要,否则您应该避免这样做。对于 SPI,您应该依赖处理时序和内核配置的驱动程序,例如 andriod 串行库。
我尝试在微控制器上实现协议和时序(当我需要在两组引脚上同时使用不同速度的不同SPI时)-即使没有多线程问题,也很难达到完美。所以你真的应该问问自己,我应该自己实现低级通信调用吗?
我意识到这实际上并没有回答您关于如何禁用所有中断的问题,但我觉得它同样解决了您的最终目标。
相关文章:
- 为什么我的打印功能不起作用?链表
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 虚拟功能不起作用
- 返回状态后,功能不会结束
- C++插入排序错误功能不起作用
- 功能不停止
- 使用链表.为什么我的插入功能不起作用?
- 打印功能不会终止
- 为什么这个base64解码/编码功能不能正常工作?
- C 所有质数功能不起作用
- 朋友功能不起作用(语法错误)
- 为什么C 模板功能不支持返回指针
- Winpcap:暂停/停止嗅探pcap_breakloop功能不起作用
- 快速排序功能不一致
- 模板功能不使用RVALUE参考实例化/接收呼叫
- C 类是功能不起作用的参数
- 排序功能不起作用
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- C Linux代码破坏Windows构建,因为缺少标头意味着功能不确定
- C++中的不间断功能