app_timer_set重置系统

7个帖子/ 0新
最后一篇
Giuseppe.
离线
最后一次露面:4年7个月前
专家
加入:2015-03-25 13:34
app_timer_set重置系统

晚上好,
我有app_timer_set有问题。
cfg_wdog是undef。
我编写了一个代码,呼叫每300ms函数read_sensor。

void read_sensor(.....){

***阅读传感器代码***

//纯粹的下一个唤醒
app_timer_set(sleep_off_msg,task_app,29);
//普通的下一个读完300ms后
app_timer_set(Read_sensor_msg,task_app,30);

//去睡觉
app_timer_set(sleep_on_msg,task_app,0);
}
void sleep_on(...){
app_set_extended_sleep();
app_ble_ext_wakeup_on();
}
void sleep_off(...){
app_force_active_mode();
app_ble_force_wakeup();
app_ble_ext_wakeup_off();
}

代码工作几秒钟(大约20多秒)然后崩溃。
如果我删除app_timer_set(sleep_on_msg,task_app,0);来自READ_SESER并直接插入下面的指令然后工作。

app_set_extended_sleep();
app_ble_ext_wakeup_on();

可能是什么问题呢?

设备:
袁汉武
离线
最后一次露面:4年9月前
专家
加入:2015-03-25 08:19
嗨,加入。

嗨,加入。
我认为
app_ble_ext_wakeup_on();
需要外部事件来触发。
这是一个方面。
希望为您提供帮助。

谢谢,袁汉武。

Giuseppe.
离线
最后一次露面:4年7个月前
专家
加入:2015-03-25 13:34
我认为命令app_ble

我认为命令app_ble_ext_wakeup_on();连接处于活动状态时被忽略。
无论如何,我删除了命令。现在系统始终每3分钟和20秒崩溃。
它是shure,app_timer_set存在问题?

Giuseppe.
离线
最后一次露面:4年7个月前
专家
加入:2015-03-25 13:34
我认为问题是

我认为问题是ke_timer。在前面的示例中,我使用了3个定时器。我尝试在每个定时器火灾之后使用KE_TIMER_CLEAR,以确保资源被释放,但系统复位3分钟后,20秒。
如果我减少了用于2次系统崩溃的定时器,大约8分钟。
如果我使用一个计时器,系统似乎工作......但是对于多长时间!! ??
所以我认为计时器管理中有一个内核错误(堆栈下溢/溢出!?)。也许更好地使用Timer0中断作为时钟定时器系统,它更可靠。

Giuseppe.
离线
最后一次露面:4年7个月前
专家
加入:2015-03-25 13:34
我删除了所有ke_timers和

无论如何,我删除了所有ke_timers和系统重新启动。
在某些测试之后,我能够理解问题是由定期调用Timer调用的函数中的ke_msg_alloc的内存分配引起的问题。此功能发送消息。在消息的接收器中缺少返回(KE_MSG_CONSUMED)。所以我得出结论,内核从未释放过消息的记忆,并且在完全何时重新调整MCU。
在rw-bt-kernel-sw-fs datasheet上,在ke_msg_send的描述中,我们发现:
“发送以前分配的任何ke_msg_alloc() - 类似函数的消息。内核将照顾释放消息内存。“。
但只有当返回ke_msg_consumed时,内存就会被释放。

所以我问......有没有办法知道什么导致MCU重置(看门狗Stak Memory Full ...等)而无需去attemps?
非常感谢

mt_dialog.
离线
最后一次露面:4天23小时前
职员
加入:2015-06-08 11:34
嗨guiseppe,
Giuseppe.
离线
最后一次露面:4年7个月前
专家
加入:2015-03-25 13:34
好的谢谢。

好的谢谢。

主题锁定