读取缓冲区溢出

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

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

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

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

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

谢谢。

关键词:
设备:
RoniKreinin
离线
最后看到:3年3周前
加入:2018-01-02为16:10
我还发现

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

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入: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年3周前
加入: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
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨RoniKreinin,

嗨RoniKreinin,

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

由于MT_dialog