读取缓冲区溢出

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个职位/ 0个新
最后发表
RoniKreinin
离线
最后看到:3年1个月前
加入:2018-01-02为16:10
读取缓冲区溢出

我使用dsp v 5.150.2在传感器和Windows 10 PC之间进行通信。
我的问题是,在几秒钟的传输数据DSPS程序将调用ASSERT_WARNING(0)在user_perip_push。我认为这意味着读缓冲区溢出了。

我有传感器输出到UART (BLE)和USB(PC)同时比较数据,它似乎是完全一样的。传感器没有流量控制,但数据似乎一收到就发送出去了,所以我不知道为什么缓冲区被填满了。

我可以降低传感器读取数据的速率,这会降低数据流的速度,但它最终还是会崩溃。唯一能阻止崩溃的方法是将波特率从115200降低到19200或更低,但这会导致包丢失。

有什么办法可以在不降低数据速率的情况下解决这个问题吗?也许我可以在每次缓冲区被填满时清空它?

谢谢。

设备:
RoniKreinin
离线
最后看到:3年1个月前
加入:2018-01-02为16:10
我还发现

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

MT_dialog
离线
最后看到:4个月,1个星期前
工作人员
加入:2015-06-08 34
嗨RoninKreinin,

嗨RoninKreinin,

因此,您已经将DSPS外设连接到一个传感器,该传感器使用无流量控制的UART接口输出测量结果,因此我认为您没有使用睡眠模式,我的假设是正确的吗?关于蓝牙芯片输出只有27个字符,我不明白,这个设备通知中央数据特征的长度是160字节的需求方和为了能够支持的联系,它将执行MTU交换过程,这意味着设备将发送到另一边的链接在一个连接间隔尽可能多的包中央让他(这取决于中央),每个包都有20字节的有效载荷,如果当前连接的第一个数据包间隔,其余的数据包将27个字节的有效载荷。

在你的情况下是的,periph_to_ble_buffer在某种程度上它将会表明8个字节可从UART FIFO但当代码将尝试适应这些缓冲区中的数据将没有空间来适应数据所以你会将这一论断。现在我不认为设备从UART收到的所有数据都在另一边传输,最后的数据应该是丢失的。关于如何解决这个问题,如果你没有一个流量控制方案,那么你将无法控制来自传感器的传入数据,你将丢失数据,DSPS不是设计为没有流量控制的操作,如果你认为刷新缓冲区将有助于你可以尝试重新初始化读写索引,但我不认为这是有效的解决方案,因为如上所述,DSPS不能在没有流控制的情况下操作,如果发生溢出,您将不得不找到重新初始化系统的方法,这将意味着您将丢失数据。

由于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 34
嗨RoniKreinin,

嗨RoniKreinin,

就像我说的,设备以及需求方弗兰克-威廉姆斯经营妥善使用流控制,这一事实设备不能得到所有传感器发送的数据是最可能是因为发送数据的重叠与祝福中断580无法应付祝福和UART互动,您需要流量控制,以便在需要时停止另一边的数据传输。

由于MT_dialog