多个计时器不工作

4个职位/ 0个新职位
最后发表
wisilica
离线
最后看到:1年3个月前
加入:2015-03-17 08:16
多个计时器不工作

嗨,对话框的团队,

我在ble_app_peripheral项目中使用了3个计时器。最初,我启动一个持续时间为2ms的systick计时器,然后在systick计时器的回调中,通过使用api app_easy_timer()启动一个内核计时器,持续时间为100ms。我继续调用这个函数,到目前为止,项目工作正常。现在,当我像下面这样调用另一个5秒的内核计时器时,设备执行会突然停止。这是我正在使用的代码:

systick_register_callback (handle_2ms_timer);

空白abc(空白)

.....
systick_start (2000 1);


空白handle_2ms_timer(空白)

systick_stop ();

listen_interval = 50;
timer_listen_interval = app_easy_timer ((handle_listen_interval_timer listen_interval * 10));
user_adv ();

空白user_adv ()

struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_non_connectable_advertise_get_active ();

set_parser_data ();

set_beacon_data (cmd);

app_easy_gap_non_connectable_advertise_start ();
timer_adv_interval = app_easy_timer ((handle_adv_interval_timer adv_interval * 10));

执行没有到达两个内核计时器的回调处理程序。
当只调用两个计时器,systick和adv_interval_timer时,设备的功能是正常的。当我并发地引入第二个内核计时器时,问题就开始了。

提前谢谢,

wisilica

设备:
MT_dialog
离线
最后看到:7个月1天前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

同时设置两个内核计时器没有问题,你应该记住的几件事是:

  • Systick计时器不能醒来的设备,如果你开始Systick定时器和设备不会决定去睡觉醒来通过计时器,但只有当它是时间为下一个祝福活动,如果你设置一个Systick计时器入睡只是回调将永远不会发生。
  • 唯一能唤醒设备的计时器是内核计时器。
  • 你将不得不设置内核计时器时,设备是清醒的,我可以看到你正在设置计时器时,你开始发布,计时器将发生。

当您说代码执行停止时,它在哪里停止?

由于MT_dialog

wisilica
离线
最后看到:1年3个月前
加入:2015-03-17 08:16
嗨,对话框中,

嗨,对话框中,

我发现我为两个计时器设置的时间持续时间是相同的。这是设备执行停止的原因吗?如果我为两个计时器设置了不同的持续时间,执行就不会停止。

谢谢,
Wisilica

MT_dialog
离线
最后看到:7个月1天前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

不,不应该发生这种情况,您必须准确地检查代码停止的位置,在哪个函数中,以便查看为什么会发生这种情况。

由于MT_dialog