我使用DSPS v 5.150.2在传感器和Windows 10 PC之间进行通信。
我所拥有的问题是,在传输数据几秒钟后,DSPS程序将在User_PeriPH_Push上调用Assert_Warning(0)。我相信这意味着读取缓冲区溢出。
我的同时将传感器输出到UART(BLE)和USB(PC)以比较数据,似乎它完全相同。传感器没有流量控制,但在收到时,数据似乎会发出,所以我没有看到为什么要填满了缓冲区。
我能够降低传感器执行读数的速率,这会减慢数据流,但最终仍将崩溃。唯一似乎停止崩溃的唯一就是将波特率降低到115200至19200年或更低,但这会导致丢包。
知道如何在不降低数据速率的情况下解决这个问题吗?也许我可以在缓冲区满的时候清空它?
谢谢。
设备:
我还发现蓝牙芯片只输出数据包的前27个字符,但是数据包的长度是45个字符。这可能是问题的一部分
嗨RoninKreinin,
所以你已经将dsp外设连接到一个传感器,该传感器使用UART接口输出测量数据,没有流量控制,所以我假设你没有使用睡眠模式,我的假设是正确的吗?关于蓝牙芯片输出只有27个字符,我不明白,这个设备通知中央数据特征的长度是160字节的需求方和为了能够支持的联系,它将执行MTU交换过程,这意味着设备将发送到另一边的链接在一个连接间隔尽可能多的包中央让他(这取决于中央),每个包都有20字节的有效载荷,如果当前连接的第一个数据包间隔,其余的数据包将27个字节的有效载荷。
在你的情况下是的,periph_to_ble_buffer在某种程度上它将会表明8个字节可从UART FIFO但当代码将尝试适应这些缓冲区中的数据将没有空间来适应数据所以你会将这一论断。现在我不认为设备从UART收到的所有数据都转移到了另一边,最后的数据应该是缺失的。关于如何解决这个问题,如果你没有流量控制方案,那么你将无法控制来自传感器的传入数据,你将会丢失数据,而DSPS的设计不是在没有流量控制的情况下运行的,如果你认为刷新缓冲区将帮助你可以尝试重新初始化读写索引,但我不认为这是有效的解决方案,因为正如所提到的DSPS不能操作没有流控制,如果发生溢出,您将不得不找到重新初始化系统的方法,这当然意味着您将丢失数据。
由于MT_dialog
对不起,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分钟后,缓冲区仍然会溢出。
至于流量控制,我看看是否可以加到传感器上
谢谢
嗨RoniKreinin,
就像我说的,设备以及需求方弗兰克-威廉姆斯经营妥善使用流控制,这一事实设备不能得到所有传感器发送的数据是最可能是因为发送数据的重叠与祝福中断580无法应付祝福和UART互动,您需要流量控制,以便在需要时停止另一端的数据传输。
由于MT_dialog