嗨,对话框:
您可以看到,在操作系统准备好之前,我无法使用App_Timer_Set()和发送消息函数(例如:KE_MSG_SEND_BASIC())。
但我怎么知道操作系统就准备好了?
谢谢溧阳。
嗨溧阳,
我不确定我不确定,你不能通过kernel_timer发送基本邮件,因为操作系统没有准备好?由于BLE开启,操作系统始终准备好。如果在BLE打开时设置您的计时器,则将提供从计时器发送的消息。也许你在没有打开时设置计时器,而计时器永远不会发生?
你能否检查这个常见问题解答也许它会帮助你http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...
谢谢mt_dialog.
嗨,mt_dialog,
你是对的,自从BLE开启以来,操作系统始终准备好了。然后我可以使用定时器。像往常一样,当DA重启时,在BLE之前,如果我使用计时器或发送消息,则将不会发生计时器,它没有效果。但我的病情很特别。当DA重启时,在BLE开启之前,GPIO2外部中断到来,在GPIO2_Handler()中我发送消息然后发送程序中断。该计划如下:
void gpio2_handler(void){nvic_disableirq(gpio2_irqn);/ *①关闭中断* /
/ **外设域Si Down,那么这是唤醒过程。需要调用periph_init()。* /gbext2irqiscomeflg = true;/ *防重入开头LY150925 * /if(getBits16(sys_stat_reg,per_is_down))periph_init();gbext2irqiscomeflg = false;/ *防重入防重入LY150925* /
global_int_stop();/ **将ffo中数码先取出* /adxl362fiforead(adxl362databuf,fifo_num_set * 6);/ *②清除362 IRQ PIN * /global_int_start();
#if(cfg_led_ctl)if(led_unactive == __tgledctlhandler.eledactive){setsleepon();}#endif // cfg_led_ctl.
//唤醒这里的blesetbits32(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 PIN * /
nvic_enableirq(gpio2_irqn);/ *④打开中断* /}
该计划将突破。这是真的吗?
在您的中断处理程序中,您唤醒了BLE核心,然后发送消息。通常,消息应该在队列中,并且操作系统会在准备就绪后立即服务。如果您面临任何概要,可能是因为中断例程和您调用的INT_START / STOP。如果您在ISR中设置标志并在App_Async_trm函数中处理中断事件,可能会更好。
好的,谢谢你的帮助。
嗨溧阳,
我不确定我不确定,你不能通过kernel_timer发送基本邮件,因为操作系统没有准备好?由于BLE开启,操作系统始终准备好。如果在BLE打开时设置您的计时器,则将提供从计时器发送的消息。也许你在没有打开时设置计时器,而计时器永远不会发生?
你能否检查这个常见问题解答也许它会帮助你http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...
谢谢mt_dialog.
嗨,mt_dialog,
你是对的,自从BLE开启以来,操作系统始终准备好了。然后我可以使用定时器。
像往常一样,当DA重启时,在BLE之前,如果我使用计时器或发送消息,则将不会发生计时器,它没有效果。
但我的病情很特别。当DA重启时,在BLE开启之前,GPIO2外部中断到来,在GPIO2_Handler()中我发送消息然后发送程序中断。
该计划如下:
void gpio2_handler(void)
{
nvic_disableirq(gpio2_irqn);/ *①关闭中断* /
/ *
*外设域Si Down,那么这是唤醒过程。需要调用periph_init()。
* /
gbext2irqiscomeflg = true;/ *防重入开头LY150925 * /
if(getBits16(sys_stat_reg,per_is_down))
periph_init();
gbext2irqiscomeflg = false;/ *防重入防重入LY150925* /
global_int_stop();
/ *
*将ffo中数码先取出
* /
adxl362fiforead(adxl362databuf,fifo_num_set * 6);/ *②清除362 IRQ PIN * /
global_int_start();
#if(cfg_led_ctl)
if(led_unactive == __tgledctlhandler.eledactive){
setsleepon();
}
#endif // cfg_led_ctl.
//唤醒这里的ble
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 PIN * /
nvic_enableirq(gpio2_irqn);/ *④打开中断* /
}
该计划将突破。这是真的吗?
谢谢溧阳。
嗨溧阳,
在您的中断处理程序中,您唤醒了BLE核心,然后发送消息。通常,消息应该在队列中,并且操作系统会在准备就绪后立即服务。如果您面临任何概要,可能是因为中断例程和您调用的INT_START / STOP。如果您在ISR中设置标志并在App_Async_trm函数中处理中断事件,可能会更好。
谢谢mt_dialog.
嗨,mt_dialog,
好的,谢谢你的帮助。
谢谢溧阳。