应用程序\计时器\设置回拨问题

2个职位/0个新职位
最后一篇文章
马克.布洛赫
离线
最后一次见到:1年7个月前
已加入:2015-12-09 16:33
应用程序\计时器\设置回拨问题

我正在使用app\u计时器回调每秒运行一些可能很长的(有时可能高达100ms左右)代码。在回调结束时,我调用app\u timer\u set重新启动计时器。我的应用程序中有一个非常断断续续的问题:在几个小时到几天之后,看门狗会重新启动。我正在尝试捕捉调试器上的重置,看看我能学到什么,但同时我想知道:
1) 在回调中运行该代码是可取的,还是我应该将其移到其他地方(例如,只需在回调中增加一个计数器,并在BLE调度程序之后的主循环中处理代码)?
2) 与#1相关:应用程序计时器回调在什么上下文中运行?它是从中断调用的,还是由调度程序调用的?在user\u callback\u config.h中定义的回调也是如此。
3) 有没有更好的方法来定期执行应用程序代码?
如果有帮助的话,下面是关于这个应用程序的一些其他细节:我作为一个中心运行这个部分(我从DSPS代码开始),我让它嗅探广告,缓冲来自广告的数据,然后以9600波特的速率通过UART发送到一个调制解调器(这就是延迟可能出现的地方)。除了广告数据收集以外的所有内容都发生在应用程序计时器回调中。

谢谢!

设备:
MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
你好,马克·布洛赫,

你好,马克·布洛赫,

1因为你的应用程序可以在主循环中运行100毫秒在应用程序中\u asynch \u trm这是明智的。

2.从调度程序调用计时器的回调。

三。因为你的代码运行了100毫秒,一个好主意是如果可能的话,把你的代码分解成更小的执行块,让CPU在一个地方占用那么长时间的问题是调度器不会调度任何传入的消息,因此您可能会丢失事件。一个想法是通过app\u asynch\u trm或app\u on ble\u powered中的主循环运行代码,并返回KEEP\u powered或GOTO\u SLEEP,以便重新运行调度程序和应用程序的一小部分或进入睡眠。

谢谢你的对话