我正在尝试在 Raspberry Pi 上开发一个 C/C++ 用户空间应用程序,该应用程序处理来自 SPI 设备的数据。我正在使用WiringPi库(函数WiringPiISR),它注册了一个函数(真正的中断处理程序),该函数将从 IRQ 事件的 pthread 中断处理程序中调用。
我听说 STL 容器不是线程安全的,但是在执行我的回调函数时拥有一个互斥锁就足够了,当然在访问那里的缓冲区/容器时在主线程中拥有一个锁就足够了吗?
我通过wiringPiISR注册的“真正的中断处理程序”看起来像这样
std::deque<uint8_t> buffer;
static void irq_handler()
{
uint8_t data;
while (digitalRead(IRQ_PIN)==0)
{
data = spi_txrx(CMD_READBYTE);
pthread_mutex_lock(&mutex1);
callback(data);
pthread_mutex_unlock(&mutex1);
}
}
static void callback(uint8_t byte)
{
buffer.push_back(byte);
}
或者有没有更简单的方法来实现线程 ISR 和主线程之间的数据交换?