读缓冲区溢出

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5 posts / 0 new
最后一篇
ronikreinin.
离线
最后一次露面:2 years 11 months ago
加入:2018-01-02 16:10
读缓冲区溢出

我正在使用DSPS v 5.150.2在传感器和Windows 10 PC之间进行通信。
The problem I am having is that after a few seconds of transmitting data the DSPS program will call ASSERT_WARNING(0) at user_periph_push. I believe this means that the read buffer is overflowing.

我有这两个UART的传感器输出(祝福)d USB(PC) at the same time to compare the data, and it seems that it is exactly the same. The sensor doesn't have flow control but the data seems to be sent out as soon as it is received, so I don't see why the buffer is being filled up.

I am able to lower the rate at which the sensor performs readings, which slows down the data flow but it will still crash eventually. The only thing that seems to stop the crashing is lowering the baud rate from 115200 to 19200 or lower, but this causes packet loss.

有关如何解决此问题而不减速数据速率的任何想法?也许我每次填满时都可以清空缓冲区?

谢谢。

关键词:
设备:
ronikreinin.
离线
最后一次露面:2 years 11 months ago
加入:2018-01-02 16:10
我也发现了

我还发现蓝牙芯片仅输出数据包的前27个字符,但数据包的长度为45个字符。这可能是问题的一部分

mt_dialog.
离线
最后一次露面:1个月4周前
职员
加入:2015-06-08 11:34
嗨roninkreinin,

嗨roninkreinin,

所以您已将DSP外设连接到传感器,该传感器使用UART接口输出没有流量控制的测量值,因此我认为您不使用睡眠模式,是我的假设是否正确?关于蓝牙芯片仅输出27个字符,我不太明白,设备用数据通知中心,在DSP中的特性长度为160字节,以便链接能够支持它将支持它执行MTU Exchange过程,这意味着设备将在一个连接间隔中发送到链接的另一侧,因为中央允许他(这取决于中心),并且每个数据包都有20个字节的有效载荷它在当前连接间隔中的第一个数据包和其余数据包将具有27个字节的有效载荷。

在您的情况下是,在某些时候,Periph_to_ble_buffer会发现UART FIFO的8个字节,但是当代码将尝试适合缓冲区中的那些数据时,将没有空间适合数据,因此您将符合数据得到将是那个断言。现在我不认为所有数据都从UART接收到另一侧传输的数据,应该缺少最后一个数据。关于如何解决这个问题,如果您没有流控制方案,则无法从传感器控制传入数据,并且您将失去数据,如果您认为,DSP不设计用于无流量控制,如果您认为闪烁缓冲区将有助于您可以尝试重新初始化读写索引,但我不认为这是有效的解决方案,因为如上所述DSP无法在没有流量控制的情况下运行,如果发生溢出,则必须找到一个重新初始化系统的方法,这将意味着您将放松数据。

谢谢mt_dialog.

ronikreinin.
离线
最后一次露面:2 years 11 months ago
加入:2018-01-02 16:10
对不起,我没有解释

对不起,我没有解释27个角色问题。问题似乎是DA14580无法在接收到下一个数据包之前将所有数据写入存储器。如果我更改采样率,将保存到内存的字符数将相应地改变,因此27只是我使用的特定采样率的值。

传感器发送的数据如下所示:

HAAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH IIII
LAAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH IIII

它从H到L.

通过蓝牙收到的数据看起来像:

Haaaa BBBB CCCC DDDD EEEE FLAAAA BBBB CCCC DDDD EEEE ....等等。
因此,第一个包将在一定数量的字符中切断,并且将发送下一个字符。
如果我降低了足够低的采样率,则将发送整个包,但速率太低,对于我需要的应用程序来说太低。缓冲区仍将在跑步约5分钟后溢出。

至于流量控制,我会看到它是否可以添加到传感器中

谢谢

mt_dialog.
离线
最后一次露面:1个月4周前
职员
加入:2015-06-08 11:34
嗨ronikreinin,

嗨ronikreinin,

就像我说的那样,设备随着DSPS FW使用流量控制运行,设备无法获取传感器发送的所有数据,这可能是最可能因为发送数据与BLE中断的重叠而重叠580无法应对BLE和UART交互,您需要流量控制,以便在需要时停止在另一侧的数据传输。

谢谢mt_dialog.