在我的代码中我实施了一个状态机,一旦触发了调度程序,DA14580就可以从传感器,处理它,并进入睡眠(等待下一个传感器中断)
传感器每隔20ms带来中断,我的问题是这个代码是随机崩溃的,我想问一下,可以问是否有可能在两个连续的样本之间进入睡眠模式(如果它们分开20ms)。
我正在使用pan1740(在调试环境中)
void wkup_quadec_handler(void)
{
setword16(set_freeeze_reg,frz_wdog);
nvic_disableirq(wkup_quadec_irqn);
setbits16(clk_amba_reg,pclk_div,0);
setbits16(clk_amba_reg,hclk_div,0);
if((getBits16(clk_per_reg,wakeupct_enable)!= 0))
{
setword16(wkup_reset_irq_reg,1);
setbits16(wkup_ctrl_reg,wkup_enable_irq,0);
}
if(getBits16(sys_stat_reg,per_is_down))
periph_init();
if(app_ble_ext_wakeup_get())
{
app_disable_sleep();
setbits32(gp_control_reg,ble_wakeup_req,1);
if(currentstate ==睡觉)
{
app_ble_ext_wakeup_off();
app_adv_start();
}
}
if(currentstate == sleep &&(paststate == computing || vertstate == exilisation))
{
set_state(验证,睡眠);
}
否则if(currentstate ==空闲&& paststate ==验证)
{
set_state(验证,空闲);
}
否则if(currentstate ==空闲&& paststate == computing)
{
set_state(计算,空闲);
}
global_int_stop();
flip_main_scheduler();//用于与传感器进行通信,以及数据流量
global_int_start()
返回;
}
嗨Mohit3112,
是的,您可以在两个中断事件之间进入睡眠模式,如果BLE核心没有任何事情要做(连接间隔等),系统将睡觉。
谢谢mt_dialog.
这意味着如果我的中断是20ms并且连接间隔是10ms,则在我的中断火灾时,核心可能会唤醒(如果BLE中断Fire First)。如果将执行该中断的内容会发生这种情况,我是否可以在BLE上进行中断优先级?或者将此触发系统中的任何断开连接或崩溃(硬特列)。
实际上我的代码只有在开发调试所在时才崩溃!!,当我不是在开发模式中,即#define development_debug 0代码似乎运行正常,但不会这将销毁OTP,因为我可能是加载代码,它不在系统RAM中?
嗨Mohit3112,
是的,可能会发生这种情况,如果发生系统不应崩溃,则在外部事件中,BLE事件的优先级更高,但仅延迟传感器的中断。此外,如果内核不适用于BLE中断,则无法将外部中断放在更高的优先级中,系统将失败并丢失连接。关于OTP,您无法通过将Development_debug设置为0才能刻录OTP,这只是GPIO预订等的标志。固件下载到Sysram。
谢谢mt_dialog.