用于 SPI 通信的互斥体

Mutex for SPI communication

本文关键字:SPI 通信 用于      更新时间:2023-10-16

假设我有多个节点通过公共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 来防止错误。