我在我的代码实现一个状态机,一旦触发da14580从传感器获取数据调度程序,过程,和睡觉(等待下一个传感器中断)
传感器给每20毫秒中断,我的问题是,这段代码是随机崩溃,我想问是否可以进入睡眠模式在两个连续的样本(如果他们相距20 ms)。
我用PAN1740(在调试环境)
空白WKUP_QUADEC_Handler(空白)
{
SetWord16 (SET_FREEZE_REG FRZ_WDOG);
NVIC_DisableIRQ (WKUP_QUADEC_IRQn);
SetBits16 (CLK_AMBA_REG PCLK_DIV 0);
SetBits16 (CLK_AMBA_REG HCLK_DIV 0);
如果((GetBits16 (CLK_PER_REG WAKEUPCT_ENABLE) ! = 0))
{
SetWord16 (WKUP_RESET_IRQ_REG, 1);
SetBits16 (WKUP_CTRL_REG WKUP_ENABLE_IRQ 0);
}
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
如果(app_ble_ext_wakeup_get ())
{
app_disable_sleep ();
SetBits32 (GP_CONTROL_REG BLE_WAKEUP_REQ 1);
如果睡眠(现状后= =)
{
app_ble_ext_wakeup_off ();
app_adv_start ();
}
}
如果睡眠(现状后= = & & (PastState = =计算| | PastState = = INITILISATION))
{
set_state(验证、睡眠);
}
如果空闲(现状后= = & & PastState = =验证)
{
set_state(验证、闲置);
}
如果空闲(现状后= = & & PastState = =计算)
{
set_state(计算、闲置);
}
GLOBAL_INT_STOP ();
flip_main_scheduler ();/ /与传感器、通信和数据proccessing
GLOBAL_INT_START ()
返回;
}
嗨mohit3112,
是的你可以进入睡眠模式两者之间的中断事件,如果有幸获得核心没有任何关系(连接间隔等)系统将进入睡眠状态。
由于MT_dialog
这意味着如果我中断20 ms和连接时间间隔是10毫秒,那么核心可能清醒已经当我打断火灾(如果祝福中断首先开火)。如果冲突发生的中断将执行,在祝福我能优先级中断?这将触发任何断开或崩溃(hardfalt)系统。
实际上我的代码崩溃只有当开发调试! !,当我不是在开发模式,即# define DEVELOPMENT_DEBUG 0代码似乎运行很好,但我不会这将摧毁otp可能加载代码在系统内存不?
嗨mohit3112,
是的,肯定会发生,祝福从外部事件事件有更高的优先级,如果您的系统不应发生崩溃只是延迟从传感器中断。你也不能把外部中断在更高的优先级,如果内核不祝福中断服务系统将失败和失去连接。你不能燃烧的OTP OTP只是通过设置DEVELOPMENT_DEBUG 0 GPIO预订等的只是一个信号。sysram固件下载。
由于MT_dialog