跳到主要内容

处理应用程序(用户)任务中的消息

DA14585型

一个月前

处理应用程序(用户)任务中的消息

过帐人莫吉列夫斯基60分 3个答复
0票以上

你好,PM\U对话,

我正在开发一个应用程序,它允许DA14585通过UART与另一个ARM处理器进行通信。当在广告事件之间启用延长睡眠模式时,通信应能与BLE广告同时进行,间隔为3秒。我使用SDK中的barebone示例作为应用程序中与BLE相关部分的基础。在传入消息的情况下,DA14585由中断激活,该中断触发以下回调函数:

void app\u wkup\u irq\u cb(void){SetBits16(wkup\u CTRL\u REG,wkup\u ENABLE\u irq,1);if(GetBits16(SYS_STAT_REG,PER_IS_DOWN)){periph_init();}keu msg\u send\u basic(传入\u UART\u msg,任务\u APP,0);app_wkup_irq_init();}

函数向应用程序任务(task\u APP)发送一条消息,在该任务中,UART消息的接收和处理应作为user\u catch\u rest\u hndl()中的一种情况启动。当立即执行唤醒回调函数时,接收和处理仅在随后的广告事件之后进行。图)。

图:广告期间的电流

问题是:有没有办法在下一个广告事件发生之前立即处理发送到应用程序任务的消息,然后返回到延长睡眠模式?

我尝试在将消息发送到具有以下功能的任务应用程序之前停止广告过程:

app\u easy\u timer\u cancel(使用app\u adv\u data\u update\u timer\u);app_easy_gap_advertise_stop();

并且不要在user\u app\u adv\u undirect\u complete()中重新启动广告,但此操作效果不佳。

一个月前

PM\U对话框

嗨,莫圭列夫斯基,

谢谢你的在线提问。

当DA14585处于休眠状态时,所有外围模块均断电(包括UART)。当芯片处于延长睡眠模式时,不可能有UART活动。

因此,据我在你的帖子中所知,你正在使用wake=up控制器,以便在UART上有传入数据时唤醒设备。

如果设备处于活动模式,则可以立即处理数据。我假设您可以在唤醒回调-app\u wkup\u irq\u cb()中执行此操作。

请看一下SDK的ble\u app\u sleepmode示例,它使用唤醒控制器通过GPIO触发器进行唤醒。一旦设备唤醒,您可以处理回调中的数据。

您是否使用硬件流量控制(RTC/CTS)?

谢谢,下午好

一个月前

莫吉列夫斯基 60分

嗨,PM\U对话,

非常感谢您的回复。

不,我不使用流量控制。

通过GPIO触发器唤醒工作正常,唤醒回调函数立即执行。然而,对我来说,使用回调函数来服务于与另一个处理器的UART通信协议是一个相当不可取的选择。

我的问题更多的是关于广告期间任务之间的沟通。为什么向应用程序任务发送消息会立即发生,

keu msg\u send\u basic(传入\u UART\u msg,任务\u APP,0);

但是user\u catch\u rest\u hndl()中的消息处理仅在下一个广告事件完成后进行?

是否可以在唤醒回调中禁用广告,并在与另一个处理器的UART通信完成后重新启用?

接受答案!

4周前

PM\U对话框

嗨,莫圭列夫斯基,

我已经在论坛门票上回复你了:

//www.xmece.com/support-posts/delayed-processing-messages-user-application-task-during-advertising

谢谢,下午好