多个定时器不工作

4个帖子/ 0新
最后一篇
Wisilica.
离线
最后一次露面:10个月3周前
加入:2015-03-17 08:16
多个定时器不工作

嗨对话小组,

我在我的ble_app_peripheral项目中使用了3个定时器。最初,我开始一个持续时间2ms的Systick计时器,然后在Systick计时器的回调中,我使用100ms的API App_easy_Timer()启动内核定时器。我继续打电话给这个函数,这个项目的工作正常。现在,当我称为5秒的另一个内核计时器如下,设备执行突然停止。这是我正在使用的代码:

systick_register_callback(handle_2ms_timer);

void abc(空白)
{
.....
systick_start(2000,1);

}
void handle_2ms_timer(void)
{

systick_stop();

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

}

void 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_add_interval = app_easy_timer((adv_interval * 10),handle_adv_interval_timer);

}

执行不会到达内核定时器的回调处理程序。
当仅调用2个定时器时,Systick和Adv_Interval_Timer时,设备功能很好。当我同时引入第二个内核计时器时,问题开始。

提前致谢,

Wisilica.

设备:
mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨Wisilica,

嗨Wisilica,

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

  • Systick计时器无法唤醒设备,如果启动Systick计时器,设备决定睡眠设备不会通过定时器唤醒,但只有在时间服务于下一个BLE事件时,如果您设置一个Systick计时器,你睡着了,只需发生回调。
  • 可以唤醒设备的唯一定时器是内核定时器。
  • 当设备醒目时,您必须设置内核定时器,我可以看到您在开始通告时要设置计时器,将发生该计时器。

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

谢谢mt_dialog.

Wisilica.
离线
最后一次露面:10个月3周前
加入:2015-03-17 08:16
嗨对话框,

嗨对话框,

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

谢谢,
Wisilica.

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨Wisilica,

嗨Wisilica,

不,这不应该发生,你必须检查一下代码摊位的位置,在哪个函数中,为了看看为什么发生这种情况。

谢谢mt_dialog.