我怎么知道DA14580'OS已经准备好了?

5个职位/ 0个新职位
最后发表
李阳
离线
最后看到:8个月2个星期前
专家
加入:2014-09-24 11:51
我怎么知道DA14580'OS已经准备好了?

嗨,对话框:

你看,在操作系统准备好之前,我不能使用app_timer_set()和发送消息函数(例如:ke_msg_send_basic())。

但我怎么知道Os已经准备好了呢?

谢谢李阳。

设备:
MT_dialog
离线
最后看到:5个月20个小时前
工作人员
加入:2015-06-08 34
嗨,李阳,

嗨,李阳,

我不确定我是否理解,你不能通过kernel_timer发送一个基本的消息,因为操作系统还没有准备好?操作系统总是准备好了,因为祝福是。如果你在BLE开启时设置计时器,那么你从计时器发送的消息将会被服务。也许您设置定时器时,BLE不开和定时器从来没有发生?

你能看看这个FAQ吗,也许它会对你有帮助http://support.dialog-semiconductor.com/faq/how-use-ketimer-during-wakeu..。

由于MT_dialog

李阳
离线
最后看到:8个月2个星期前
专家
加入:2014-09-24 11:51
嗨,MT_dialog,

嗨,MT_dialog,

你是对的,操作系统总是准备好了,因为祝福是。然后我就可以用计时器了
像往常一样,当DA重启时,在ble开启之前,如果我使用定时器或发送消息,定时器将永远不会发生,它没有影响。
但我的情况很特殊。当DA重新启动时,在ble打开之前,GPIO2外部中断到来,在GPIO2_Handler()中,我发送一条消息,然后程序中断。
方案如下:

空白GPIO2_Handler(空白)

NVIC_DisableIRQ (GPIO2_IRQn);/*①关闭中断*/

/*
*外围域关闭,这是唤醒过程。需要调用peripher_init()。
*/
Gbext2IrqIsComeFlg = true;/ *防重入开始ly150925 * /
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
Gbext2IrqIsComeFlg = false;/ *防重入结束ly150925 * /

GLOBAL_INT_STOP ();
/*
*将FIFO中数据先取出
*/
adxl362FifoRead(adxl362DataBuf, FIFO_NUM_SET * 6);/*②清除362 IRQ引脚*/
GLOBAL_INT_START ();

#如果(CFG_LED_CTL)
if (LED_UNACTIVE == __tGledCtlHandler.eLedActive) {
setSleepOn ();

# endif / / CFG_LED_CTL

/ /唤醒祝福
SetBits32 (GP_CONTROL_REG BLE_WAKEUP_REQ 1);// BLE醒来了
app_ble_ext_wakeup_off ();

ke_msg_send_basic (ADXL362_WAKEUP_MSG TASK_APP TASK_APP);

SetWord16(GPIO_RESET_IRQ_REG, 1 << (GPIO2_IRQn-GPIO0_IRQn));/*③清除MCU IRQ引脚*/

NVIC_EnableIRQ (GPIO2_IRQn);/*打开中断*/

程序会崩溃。这是真的吗?

谢谢李阳。

MT_dialog
离线
最后看到:5个月20个小时前
工作人员
加入:2015-06-08 34
嗨,李阳,

嗨,李阳,

在你的中断处理程序中,你唤醒ble核心,然后你发送消息。正常情况下,消息应该在队列中,一旦准备好,操作系统将立即提供它。如果您遇到任何问题,可能是由于您调用的中断例程和INT_START/STOP。如果在ISR中设置一个标志,并在app_async_trm函数中处理中断事件,可能会更好。

由于MT_dialog

李阳
离线
最后看到:8个月2个星期前
专家
加入:2014-09-24 11:51
嗨,MT_dialog,

嗨,MT_dialog,

好的,谢谢你的帮助。

谢谢李阳。

主题锁定