读缓冲区溢出

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

我正在使用DSPS v 5.150.2在传感器和Windows 10 PC之间进行通信。
我所拥有的问题是,在传输数据几秒钟后,DSPS程序将在User_PeriPH_Push上调用Assert_Warning(0)。我相信这意味着读取缓冲区溢出。

我的同时将传感器输出到UART(BLE)和USB(PC)以比较数据,似乎它完全相同。传感器没有流量控制,但在收到时,数据似乎会发出,所以我没有看到为什么要填满了缓冲区。

我能够降低传感器执行读数的速率,这会减慢数据流,但最终仍将崩溃。唯一似乎停止崩溃的唯一就是将波特率降低到115200至19200年或更低,但这会导致丢包。

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

谢谢。

关键词:
设备:
ronikreinin.
离线
最后一次露面:3年1个月前
加入:2018-01-02 16:10
我也发现了

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

mt_dialog.
离线
最后一次露面:4个月1周前
职员
加入: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.
离线
最后一次露面:3年1个月前
加入: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.
离线
最后一次露面:4个月1周前
职员
加入:2015-06-08 11:34
嗨ronikreinin,

嗨ronikreinin,

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

谢谢mt_dialog.