运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

如何在嵌入式应用中使用环形缓冲区并保证完整性

运维开发网 https://www.qedev.com 2020-07-15 09:42 出处:网络 作者:运维开发网整理
我正在微控制器中构建一个应用程序.问题是,我正在串口中接收数据.它是使用中断编写的,我猜这与线程相同.那么,如果我不能使用锁,怎样才能在缓冲区中获取这些数据并保证一些完整性? 只需在访问中断外的受保护变量(如环形缓冲区,读写位置)时禁用接收中断,因此在您需要输入缓冲区中的字节数或需要弹出一个字节的情况下: int GetBytesAvailable() { int result;
我正在微控制器中构建一个应用程序.问题是,我正在串口中接收数据.它是使用中断编写的,我猜这与线程相同.那么,如果我不能使用锁,怎样才能在缓冲区中获取这些数据并保证一些完整性? 只需在访问中断外的受保护变量(如环形缓冲区,读写位置)时禁用接收中断,因此在您需要输入缓冲区中的字节数或需要弹出一个字节的情况下:

int GetBytesAvailable()
{
    int result;        
    DisableReceiveInterrupt();
    result = writePos - readPos;
    EnableReceiveInterrupt();
    if (result < 0)
        result += RINGBUFFER_SIZE;
    return result;
}

int GetNextByte()
{
    int result = -1;
    DisableReceiveInterrupt();
    if (readPos != writePos)
    {
        result = RingBuffer[readPos++];
        readPos %= RINGBUFFER_SIZE;
    }
    EnableReceiveInterrupt();
    return result;
}

当微控制器在中断禁用时接收到一个字节.重新启用中断后,将立即调用中断处理程序.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消