处理应用程序(用户)任务中的消息
DA14585
1个月前
处理应用程序(用户)任务中的消息
发布的moguilevski60点 3回复你好PM_Dialog,
我正在研究一个应用程序,它将允许DA14585通过UART与另一个ARM处理器通信。当在广告事件之间启用延长睡眠模式时,通信应该可以与间隔为3秒的BLE广告同时进行。我使用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)){外围设置();} ke_msg_send_basic(INCOMING_UART_MSG, TASK_APP, 0);app_wkup_irq_init ();}
该函数向应用程序任务(TASK_APP)发送消息,UART消息的接收和处理应该作为user_catch_rest_hndl()的一种情况初始化。当唤醒回调函数被立即执行时,接收和处理只在后续的广告事件之后才会发生(s.图)。
问题是:是否有办法立即处理发送到应用程序任务的消息——在下一个广告事件发生之前——然后回到延长睡眠模式?
在发送消息到TASK_APP之前,我尝试停止广告过程,使用以下函数:
app_easy_timer_cancel (app_adv_data_update_timer_used);app_easy_gap_advertise_stop ();
而不是在user_app_adv_undirect_complete()中重新启动广告,但是这个动作没有很好地工作。
1个月前
嗨PM_Dialog,
非常感谢您的回复。
不,我不用流量控制。
GPIO触发器唤醒工作正常,唤醒回调函数立即执行。然而,使用回调函数来提供与另一个处理器的UART通信协议对我来说是一个相当不可取的选择。
我的问题更多的是关于广告中任务之间的交流。为什么立即向应用程序任务发送消息,
ke_msg_send_basic (INCOMING_UART_MSG TASK_APP 0);
但是在user_catch_rest_hndl()中对该消息的处理只有在下一个广告事件完成之后才会发生?
也许可以在唤醒回调中禁用广告,并在与另一个处理器的UART通信结束后重新启用它?
3周之前
嗨moguilevski,
关于这张论坛门票,我已经回复你:
//www.xmece.com/support-posts/delayed-processing-messages-user-application-task-during-advertising
谢谢,PM_Dialog
1个月前
嗨moguilevski,
谢谢你的在线提问。
当DA14585处于休眠状态时,所有外围块都将断电(包括UART)。当芯片处于延长睡眠模式时,UART活动是不可能的。
所以,就我从你的帖子中所能理解的,你正在使用唤醒=唤醒控制器,以便在UART上有传入数据时唤醒设备。
如果设备处于活动模式,则可以立即处理数据。我假设您可以在唤醒回调函数app_wkup_irq_cb()中执行此操作。
请查看SDK的ble_app_sleepmode示例,它使用唤醒控制器来通过GPIO触发器唤醒。一旦设备被唤醒,就可以在回调中处理数据。
你使用HW流量控制(RTC/CTS)吗?
谢谢,PM_Dialog