代码架构问题(随机崩溃)

5个帖子/ 0新
最后一篇
Mohit3112.
离线
最后一次露面:7个月1周前
专家
加入:2014-08-04 13:45
代码架构问题(随机崩溃)

在我的代码中我实施了一个状态机,一旦触发了调度程序,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()

返回;
}

设备:
mt_dialog.
离线
最后一次露面:2小时前1周
职员
加入:2015-06-08 11:34
嗨Mohit3112,

嗨Mohit3112,

是的,您可以在两个中断事件之间进入睡眠模式,如果BLE核心没有任何事情要做(连接间隔等),系统将睡觉。

谢谢mt_dialog.

Mohit3112.
离线
最后一次露面:7个月1周前
专家
加入:2014-08-04 13:45
这意味着如果我的

这意味着如果我的中断是20ms并且连接间隔是10ms,则在我的中断火灾时,核心可能会唤醒(如果BLE中断Fire First)。如果将执行该中断的内容会发生这种情况,我是否可以在BLE上进行中断优先级?或者将此触发系统中的任何断开连接或崩溃(硬特列)。

Mohit3112.
离线
最后一次露面:7个月1周前
专家
加入:2014-08-04 13:45
实际上我的代码正在崩溃

实际上我的代码只有在开发调试所在时才崩溃!!,当我不是在开发模式中,即#define development_debug 0代码似乎运行正常,但不会这将销毁OTP,因为我可能是加载代码,它不在系统RAM中?

mt_dialog.
离线
最后一次露面:2小时前1周
职员
加入:2015-06-08 11:34
嗨Mohit3112,

嗨Mohit3112,

是的,可能会发生这种情况,如果发生系统不应崩溃,则在外部事件中,BLE事件的优先级更高,但仅延迟传感器的中断。此外,如果内核不适用于BLE中断,则无法将外部中断放在更高的优先级中,系统将失败并丢失连接。关于OTP,您无法通过将Development_debug设置为0才能刻录OTP,这只是GPIO预订等的标志。固件下载到Sysram。

谢谢mt_dialog.