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

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

嗨,对话框:

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

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

谢谢李阳。

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

嗨,李阳,

我不确定我理解,你不能通过kernel_timer发送一个基本的消息,因为操作系统还没有准备好?因为ble是打开的,所以操作系统总是准备就绪。如果你在BLE开启时设置你的计时器,那么你从计时器发送的消息将被服务。也许你在BLE不开启且计时器从不发生的时候设置了计时器?

你能不能看看这个常见问题解答,也许它会帮助你http://support.dialog-semiconductor.com/faq/how-use-ketimer-during-wakeu..。

由于MT_dialog

李阳
离线
最后看到:7个月6天前
专家
加入:2014-09-24 11:51
嗨,MT_dialog,

嗨,MT_dialog,

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

空白GPIO2_Handler(空白)

NVIC_DisableIRQ (GPIO2_IRQn);/ /关闭中断

/*
*外周域si下降,则这是唤醒程序。需要调用外围的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
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨,李阳,

嗨,李阳,

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

由于MT_dialog

李阳
离线
最后看到:7个月6天前
专家
加入:2014-09-24 11:51
嗨,MT_dialog,

嗨,MT_dialog,

好的,谢谢你的帮助。

谢谢李阳。

主题锁定