代码体系结构问题(随机崩溃)

5个职位/0个新职位
最后一篇文章
莫希特3112
离线
最后一次见到:7个月1周前
专家
已加入:2014-08-04 13:45
代码体系结构问题(随机崩溃)

在我的代码中,我实现了一个状态机,一旦调度程序被触发,da14580就会从传感器获取数据,处理它,然后进入睡眠状态(等待下一个传感器中断的到来)
传感器每20毫秒就中断一次,我的问题是这个代码是随机崩溃的,我想问两个连续的样本之间是否有可能进入睡眠模式(如果它们相隔20毫秒)。
我正在使用PAN1740(在调试环境中)

void WKUP\u QUADEC\u处理程序(void)
{

SetWord16(SET\u FREEZE\u REG,FRZ\u WDOG);

NVIC禁用IRQ(WKUP\U QUADEC\U IRQn);

设置16(CLK\ U AMBA\ U REG,PCLK\ U DIV,0);
设置16(CLK\ U AMBA\ U REG,HCLK\ U DIV,0);

if((GetBits16(CLK\ U PER\ U REG,WAKEUPCT\ U ENABLE)!= 0))
{
设置字16(WKUP\U RESET\U IRQ\U REG,1);
SetBits16(WKUP\u CTRL\u REG,WKUP\u ENABLE\u IRQ,0);
}

if(GetBits16(SYS\u STAT\u REG,PER\u IS \u DOWN))
periph_init();

如果(app\u ble\u ext\u wakeup\u get())
{
app_disable_sleep();
SetBits32(GP\ U CONTROL\ U REG,BLE\ U WAKEUP\ U REQ,1);
如果(当前状态==睡眠)
{
app_ble_ext_wakeup_off();
app_adv_start();
}
}

if(CurrentState==SLEEP&&(PastState==COMPUTING | | PastState==INITILISATION))
{
设置\u状态(验证、睡眠);
}
else if(CurrentState==IDLE&&PastState==VALIDATION)
{
设置\u状态(验证,空闲);
}
else if(CurrentState==IDLE&&PastState==COMPUTING)
{
设置\u状态(计算,空闲);
}

全局\u INT \u STOP();
flip_main_scheduler();//用于与传感器通信和数据处理
全局\u INT \u START()

返回;
}

设备:
MT\u对话框
离线
最后一次见到:6天22小时前
工作人员
已加入:2015-06-08 11:34
你好,mohit3112,

你好,mohit3112,

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

谢谢你的对话

莫希特3112
离线
最后一次见到:7个月1周前
专家
已加入:2014-08-04 13:45
这意味着如果我的

这意味着如果我的中断是20毫秒,连接间隔是10毫秒,那么当我的中断触发时核心可能已经被唤醒(如果ble中断首先触发)。如果发生冲突,将执行哪个中断,我是否可以将中断优先于ble?或者这将触发系统中的任何断开连接或崩溃(硬故障)。

莫希特3112
离线
最后一次见到:7个月1周前
专家
已加入:2014-08-04 13:45
实际上我的代码崩溃了

实际上,我的代码只有在开发调试开启时才会崩溃!!,当我不是在ie#define development#DEBUG 0的开发模式下运行时,代码似乎运行良好,但这不会破坏otp,因为我可能在其中加载代码,而不是在系统ram中加载代码?

MT\u对话框
离线
最后一次见到:6天22小时前
工作人员
已加入:2015-06-08 11:34
你好,mohit3112,

你好,mohit3112,

是的,这肯定会发生,BLE事件在外部事件中具有更高的优先级,如果发生这种情况,您的系统应该不会崩溃,而只是延迟来自传感器的中断。此外,不能将外部中断置于更高的优先级,如果内核不提供BLE中断,系统将失败并失去连接。关于OTP,你不能仅仅通过将DEVELOPMENT\u DEBUG设置为0来烧录OTP,这只是GPIO保留等的标志。固件下载到sysram。

谢谢你的对话