用于 SPI 通信的互斥体
Mutex for SPI communication
假设我有多个节点通过公共MISO MOSI通道执行SPI通信以及不同的GPIO引脚来执行芯片选择选项,如下面的类所示
#ifndef TEST_H
#define TEST_H
#include<mutex>
#include<stdint.h>
class spi
{
private:
static std::mutex mtx;
public:
writeSPI(int gpio, uint8_t reg, char* buf)
{
mtx.lock();
//opening chip select sequence for the received gpio
//spi sequence to write data to target
//closing chip select sequence for the received gpio
mtx.unlock();
}
};
#endif
各个节点通过 include 指令创建自己的类实例,并调用writeSPI(int, uint8_t, char)
函数,如下所示
#include "test.h"
#include <unistd.h>
int main(int argc, char* argv[])
{
spi instance;
while(true)
{
instance.writeSPI(/* required args*/);
usleep(1000000);
}
}
分配的buf
是否有可能写入错误的剪辑选择gpio
?如果这是处理任务的错误方法,正确的替代方案是什么?
静态 std::mutex 将正确防止对 writeSPI(...( 的多线程访问。
不过,您不应该手动调用锁定/解锁,而是使用 std::unique_lock 来防止错误。
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 删除功能不适用于串行通信后多个循环中的多个实例
- 如何将 2 个 SPI 设备连接到 Arduino MkrZero
- 网站和C++程序在同一台 Linux PC 上的通信
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 使用 pybind11 共享 MPI 通信器
- 进程间通信堆内存
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 在PROGMEM中添加更多数据会中断Arduino Mega 2560上的SPI传输
- 与SPI NAND闪存(STM32L4,QSPI)的通信问题
- 可以测试SPI通信外部模块
- 用于 SPI 通信的互斥体
- SPI 通信树莓PI Arduino