gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:02:10 26 4
gpt4 key购买 nike

我正在用微 Controller 构建应用程序。问题是,我在串口接收数据。它是使用中断编写的,我猜和线程一样。那么,如果我不能使用锁,我如何才能在缓冲区中获取这些数据并保证一定的完整性?

最佳答案

当您在中断外部访问 protected 变量(如环形缓冲区、读写位置)时,只需禁用接收中断,因此在您需要输入缓冲区中的字节数或需要弹出一个字节的情况下:

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;
}

当微 Controller 在中断被禁用的情况下接收到一个字节时。重新启用中断后,将立即调用中断处理程序。

关于c - 如何在嵌入式应用中使用环形缓冲区并保证完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16945846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com