没有流量控制的DSP,缓冲区溢出。

15个帖子/ 0新
最后一篇文章
瓦迪姆
离线
最后一次见到:2个月前1年
已加入:2015-08-13 08:28
没有流量控制的DSP,缓冲区溢出。

你好。

我尝试在DA14580上使用项目DSPS版本5.150.2
在我的项目中:
1)休眠被禁用(Arch_sleep_off)。
2) 流量控制也被禁用:
a)#undef cfg_uart_hw_flow_ctrl
b)#undef cfg_uart_sw_flow_ctrl

连接到某个外部处理器的UART接口的可编程设备(外设)侧。初始化后,外部处理器立即开始向UART发送信息。初始化之后,BLE立即没有建立连接。
我在函数中得到警告:
“用户\u外设\u推送”
在线:
“if(user\u buffer\u write\u check(&periph\u to\u ble\u buffer,wrdata,RX\u CALLBACK\u SIZE)!=RX\u(大小)”

我怎样才能解决这个问题?
(缓冲区中的数据没有任何重要性,并且数据部分可能会丢失)

谢谢。

关键词:
设备:
MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
嗨,瓦迪姆,

嗨,瓦迪姆,

流量控制不仅需要睡眠,如果删除此,则无法保证您的系统中没有任何数据级组。您可以尝试删除ASSET_WARNING并检查写入缓冲区,但DSP未测试此类用法(无流量控制)。最多可能的旧数据将被新数据覆盖,并且您将失去字节。

谢谢你的对话

瓦迪姆
离线
最后一次见到:2个月前1年
已加入:2015-08-13 08:28
我删除了警告。

我删除了警告。
我是从“uart\u sps\u rcv\u data\u avail\u isr”到“HardFault\u HandlerC”的。
现在我试图禁用development_debug,但我没有重置wdt。

我如何在我尚未处于连接状态时禁用UART接收数据?

MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
嗨,瓦迪姆,

嗨,瓦迪姆,

正如我已经提到的那样,DSP没有针对这种用法进行测试,您可以尝试的另一件事是从user\u on\u init()函数中删除user\u sceduler\u init(),从periph\u init()中删除uart\u sps\u init(),并在user\u on\u connection()函数中调用这两个删除的函数,new user \u on \u connection()函数应该如下所示:

void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
默认\u app \u on \u connection(connection \u idx,param);
用户\u gattc \u exc \u mtu \u cmd(连接\u idx);
应用程序\u轻松\u间隙\u参数\u更新\u启动(连接\u idx);
ARCH_PRINTF(“设备连接\ r \ n”);
UART_SPS_INIT(UART_SPS_BAUDRATE,3);
用户_scheduler_init();
}

当然,您应该分别设置和重置UART分别在连接和断开连接中,因为如果没有任何睡眠,并且中断将保持配置。

谢谢你的对话

瓦迪姆
离线
最后一次见到:2个月前1年
已加入:2015-08-13 08:28
你好。

你好。

谢谢你回答。它有助于但只有部分地。
当中央处理器离开外围设备,连接变得很弱时,我仍然需要缓冲区溢出。

附笔
对我来说,不需要将“uart\u sps\u init”插入“user\u on\u connection”。该函数位于“user\u scheduler\u init”中。

MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
嗨,瓦迪姆,

嗨,瓦迪姆,

如果您没有流量控制,我认为这是预期的。

谢谢你的对话

纳拉康特罗
离线
最后一次见到:3年5个月前
已加入:2016-04-14 10:22
大家好。

大家好。
我对同样的问题感兴趣,并用以下方法解决。

1条件:
1) 无流量控制,仅使用RX、TX信号
2) 总是醒来
2更改“user\u sps\u device.c”处的代码
枚举Arch_Main_Loop_callback_ret user_on_system_powered(void)
{
user_sps_sleep_restore();
user_ble_pull(true,null);
返回keep_powered;// <------------------返回goto_sleep;
}

谢谢。

红钴蓝龙
离线
最后一次见到:2年7个月前
已加入:2017-11-16 18:38
我也在做同样的工作

我在同一条线上工作,我只需要发送/接收。你是否做了文章其余部分的所有修改以及你所做的编辑。你能告诉我更多吗。

谢谢,

红钴蓝龙
离线
最后一次见到:2年7个月前
已加入:2017-11-16 18:38
我想这是给纳拉康特罗的

这是naracontrol的,我和你一样。你能再多发一点信息吗。你做了上面的所有步骤,然后你提到的编辑。

谢谢,

罗密欧
离线
最后一次见到:3个月1周前
已加入:2018-07-24 06:58
这个问题解决了吗?

这个问题解决了吗?我也很担心这个。请与解决它的人分享您的信息。

PM\U对话框
离线
最后一次见到:1天21小时前
工作人员
已加入:2018-02-08 11:03
嗨,罗密欧,

嗨,罗密欧,

你能澄清你的问题吗?如果我能够正确理解,您希望在没有流量控制的情况下使用DSP?如果您的意思是,在没有流量控制时,您将无法使用睡眠操作DSP。如果您愿意没有流量控制,则应在活动模式配置中运行DSP。否则,如果您只有Rx / TX引脚和睡眠模式配置,则会有数据丢失。请注意,DSPS项目旨在默认操作软件和硬件流控制。如果禁用睡眠模式并从项目中删除软件流控制功能,我不是100%确定没有缺少数据。

谢谢,下午好

罗密欧
离线
最后一次见到:3个月1周前
已加入:2018-07-24 06:58
嗨,mt_dialog

嗨,下午好

正如瓦迪姆所说,我也处于同样的情况。
1)休眠被禁用(Arch_sleep_off)。
2) 流量控制也被禁用:
a)#undef cfg_uart_hw_flow_ctrl
b)#undef cfg_uart_sw_flow_ctrl

与BLE连接后,RX数据溢出漏光。
如果我丢失数据,我不在乎,但我不希望从中下降。
我在这里尝试过,但它不起作用。我不想要睡眠模式。
请具体告诉我如何丢弃RX溢出数据。
我不知道该把它扔在哪里。
请给我一个具体的代码。

请帮助我不要吹下来。

谢谢,

PM\U对话框
离线
最后一次见到:1天21小时前
工作人员
已加入:2018-02-08 11:03
嗨罗密欧,

嗨罗密欧,

你能试试这个让我知道吗?

1) 无流量控制,仅使用RX、TX信号

2) 总是醒来

2更改“user\u sps\u device.c”处的代码

枚举Arch_Main_Loop_callback_ret user_on_system_powered(void)

{

user_sps_sleep_restore();

user_ble_pull(true,null);

返回keep_powered;// <------------------返回goto_sleep;

}

此外,过去的论坛线程下面可能会有所帮助。

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/read-buffer-overflow

谢谢,下午好

罗密欧
离线
最后一次见到:3个月1周前
已加入:2018-07-24 06:58
尊敬的PM\U DIalog,

尊敬的PM\U DIalog,

结果是一样的。
始终醒来的是arch_sleep_off吗?
const static sleep\u state\u t app\u default\u sleep\u mode=ARCH\u sleep\u OFF;
这就是我所做的。

我们使用了各种方法,但他们没有得到解决。
波特率从115200到19200,
虽然它在时间BLE溢出时阻止了RX,但不再接收连接并必须重新连接连接。
这不是我们想要的。

有许多传感器仅使用TX,RX。它必须解决。
请提出解决方案。

谢谢,

PM\U对话框
离线
最后一次见到:1天21小时前
工作人员
已加入:2018-02-08 11:03
嗨罗密欧,

嗨罗密欧,

如果没有流量控制方案,那么就无法控制传入的数据,并且会丢失数据,因此DSP的设计不能在没有流量控制的情况下运行。当用BLE中断发送数据时,580无法处理BLE和UART的交互,因此需要流量控制,以便在需要时停止另一端的数据转换。在软件流控制(CFG\u UART\u sw\u flow\u CTRL)的情况下,睡眠不工作,因为您的UART需要使用16MHz XTAL时钟作为通信源。如果启用了硬件流控制(CFG\u UART\u hw\u flow\u CTRL),则只有当数据缓冲区中有0字节的数据时,设备才会进入休眠状态,即使只有一个字节的数据也会使设备保持唤醒状态。因此,通过硬件流控制,当缓冲区中有0字节的数据时,设备进入睡眠状态,当设备唤醒时,RTS将切换。这就是为什么流控制在dsp上如此重要的原因,即使没有睡眠模式,如果您不想使用额外的CTS/RTS信号,也建议使用S/W流控制。如果您想删除睡眠模式并将设备设置为睡眠模式,是的,您应该将app\u default\u sleep\u mode修改为ARCH\u sleep\u OFF。为了获得更多的信息,我强烈建议您看一下DSPS用户手册。

谢谢,下午好