跳到主要内容

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

DA14585.

3个星期前

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

张贴了moguilevski.60分 3回复
0旋转

你好pm_dialog,

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

void app_wkup_irq_cb(void){setbits16(wkup_ctrl_reg,wkup_enable_irq,1);if(getBits16(sys_stat_reg,per_is_down)){periph_init();} KE_MSG_SEND_BASIC(incoming_uart_msg,task_app,0);app_wkup_irq_init();}

该函数将消息发送到应用程序任务(Task_App),其中应该将UART消息的接收和处理作为user_catch_rest_hndl()中的案例启动。当立即执行唤醒回调函数时,仅在随后的广告事件之后仅发生接收和处理。

图:广告期间的当前

问题:在发生下一个广告事件之前,是否有任何方法处理发送到应用程序任务的消息 - 然后返回扩展睡眠模式?

在通过以下函数将消息发送到Task_App之前,我试图停止广告过程:

app_easy_timer_cancel(app_add_data_update_timer_used);app_easy_gap_advertise_stop();

而不是在User_App_Adv_Undirect_Complete()中重新启动广告,但此操作不起作用。

3个星期前

PM_DIALOG.

嗨moguilevski,

谢谢你在线问题。

当DA14585正在睡眠时,所有外围块都断电(包括UART)。当芯片处于扩展睡眠模式时,不可能具有UART活动。

因此,就我可以从您的帖子中理解,您正在使用Wake = Up控制器,以便在UART上有传入数据时唤醒设备。

如果设备处于活动模式,则可以立即处理数据。我假设您可以在唤醒回调中进行 - app_wkup_irq_cb()。

请查看使用唤醒控制器的SDK的BLE_APP_SLEEPMODE示例,以便通过GPIO触发唤醒。一旦设备唤醒,您可以处理回调中的数据。

您使用的是HW流量控制(RTC / CTS)吗?

谢谢,PM_DIALOG.

2个星期前

moguilevski. 60分

嗨pm_dialog,

非常感谢您的回复。

不,我不使用流量控制。

通过GPIO触发器唤醒keysey,即时执行唤醒回调函数。但是,要使用回调函数,请与其他处理器提供UART通信协议,对我来说是一个相当不良的选项。

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

ke_msg_send_basic(incoming_uart_msg,task_app,0);

但是在user_catch_rest_hndl()中处理该消息才会在下次广告事件完成后进行?

也许可以在与另一个处理器的UART通信完成后禁用唤醒回调和可重新启用它?

接受答案!

1周前

PM_DIALOG.

嗨moguilevski,

我在这个论坛门票上回复了你:

https://www.dialog-seminile.com/support-posts/delayed-processing-messages-user-application-task-duredvertings

谢谢,PM_DIALOG.