Tcdrain 写入后随机阻塞几毫秒

问题描述 投票:0回答:0

Uname: Linux rpi-ptz 5.15.0-1026-raspi #28-Ubuntu aarch64 GNU/Linux.

我正在使用 libserial 和 tcdrain 通过我构建的驱动程序以 2MHz 的波特率发送串行。它需要在写入时将 TX 使能引脚设置为高电平,并在 TX 之后立即设置为低电平。问题是有时 tcdrain 会在写入位后保持 8-16 毫秒。 这是我的代码:

int EmbeddedSerialPort::writePort(uint8_t *packet, int length)
{
int ret = -1;
m_pSerial->FlushIOBuffers();
m_pTxEnPin->SetActive(true);
try
{
    for (int i = 0; i < length; i++)
    {
        // m_dataBuffer =  LibSerial::DataBuffer(packet, packet + length);
        m_pSerial->WriteByte(packet[i]);
        // tcdrain(m_pSerial->GetFileDescriptor());
    }

    // m_pSerial->DrainWriteBuffer();
    tcdrain(m_pSerial->GetFileDescriptor());
    m_pTxEnPin->SetActive(false);
    ret = length;
}

SERIAL_EXCEPTION_RET_NONE("Writing Command Buffer")
m_pSerial->FlushOutputBuffer();
// OnWriteComplete();
return ret;
}
process operating-system blocking termios libserial
© www.soinside.com 2019 - 2024. All rights reserved.