多个计时器不工作

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

嗨,对话框的团队,

我在我的ble_app_peripheral项目中使用3个计时器。最初,我启动了一个持续时间为2ms的系统棒计时器,然后在系统棒计时器的回调中,我使用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
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

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

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

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

由于MT_dialog

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

嗨,对话框中,

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

谢谢,
Wisilica

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

不,这不应该发生,你将不得不检查代码在哪里停顿,在哪个函数中,以了解为什么会发生这种情况。

由于MT_dialog