prox_reporter rtc_interrupt_hdlr在arch_ext_sleep_on in white wast with

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
10个帖子/ 0新
最后一篇
安德鲁尔
离线
最后一次露面:1个月2周前
加入:2020-11-05 02:45
prox_reporter rtc_interrupt_hdlr在arch_ext_sleep_on in white wast with

嗨伙计,

我一直在跟踪一个相当刺激的错误,我终于设法在对话框示例代码上重现它。我使用CFG_EXT_SLEEP_WAKEUP_RTC设置PROX_REPORTER,以便通过RTC从睡眠中唤醒。

当我用arch_sleep_off运行prox_reporter时,一切都很好。RTC_INTRUPT_HDLR每20秒开始一次(10秒的广告和rTC命中前10秒)。这只是鸭子。

但是,当我使用ARCH_EXT_SLEEP_ON运行PROX_REPORTER时,在RTC_INTERRUPT_HDLR触发之后,它会在稍后再次触发* 696ms。如果你试图可靠地安排一些东西,那就不好了。

此错误似乎也影响Timer1处理程序,因为这就是我正在跟踪的。我在RTC上报告它,因为它是一个*很多*在RTC处理程序上捕获这一点更容易且更明显。

这太接近了广告间隔是巧合的。什么是ble睡觉代码来引起这个?我如何解决这个问题?

谢谢。

设备:
PM_DIALOG.
离线
最后一次露面:3天3小时前
职员
加入:2018-02-08 11:03
嗨安德鲁尔,

嗨安德鲁尔,

谢谢你的问题。让我试着解释Prox_reporter如何在定义CFG_EXT_SLEEP_WAKEUP_RTC时如何运行。

最初,设备将开始向上。默认睡眠模式延长睡眠 - 请参阅user_config.h中的app_default_sleep_mode。这意味着系统将在广告间隔之间进入扩展的睡眠模式,并且它将通过BLE定时器自动唤醒。

在预定义的时间(3min)之后 - 请参阅user_default_hnd_ponf结构中的,在user_config.h中查看(此值可以更改;例如,12000为12sec的广告) - 设备将停止副词,并且将触发app_advertise_complete()回调芯片将进入永久睡眠模式(无广告)。在此回调中,RTC配置为触发延长睡眠中的唤醒中断 - 请参阅configure_rtc_wakeup()。

如果在CONFIGURE_RTC_WAKEUP()中,请在RTC_TIME_T中找到RTC配置:11h,55min,30秒)。因此,将在广告已停止时触发RTC_Interrupt_hdlr(),在11h,55min,30秒之后,芯片将唤醒。

我建议您使用SmartSnippets Toolbox Power Profiler进行快速测试并验证它。

将广告期更改为12秒:.advertise_period = MS_TO_TIMERUNITS(12000),

在15秒后,配置RTC唤醒DA14531:

rtc_time_t time = {.hour_mode = rtc_hour_mode_24h,.pm_flag = 0,.hour = 00,.minute = 00,.sec = 5,.hsec = 00};

谢谢,PM_DIALOG.

安德鲁尔
离线
最后一次露面:1个月2周前
加入:2020-11-05 02:45

嗨,pm_dialog,

>在预定义的时间(3min)之后 - 请参阅user_default_hnd_conf结构中的,请参阅user_config.h中的Advertise_Period(此值可以更改;例如12SEC的12000广告)

是的,默认值为3分钟,我更改为此,以便我可以更快地复制错误。

>如果您进入CONFIGURE_RTC_WAKEUP(),请在RTC_TIME_T时间内找到RTC配置:11h,55min,30秒)。因此,将在广告已停止时触发RTC_Interrupt_hdlr(),在11h,55min,30秒之后,芯片将唤醒。

不,那是不是这是如何工作的。CONFIGURE_RTC_WAKEUP()每次通过时将时间重置为11:55:30,以便将来可以在将来10秒内设置警报。因此,只要在App_Advertise_Complete()末尾的Configure_rtc_wakeup()触发时,RTC时间都会重置,并将告警将来设置10秒钟。

RTC_INTRUPT_HDLR()将来(睡眠+ 10s)触发10秒。没关系。如果设置了ARCH_EXT_SLEEP_ON,则问题是它*也*再次触发696ms(睡眠+ 10 + .696s)。那不好。

我提供了一个真实的解释错误。我曾在我的安捷伦示波器和我的Keithley Sourcemeter上验证了它。我一直在狩猎兔子洞,我介绍了一种在对话框代码中复制它的方法。除非响应恢复谈论中断屏蔽和可能的优先级反转,否则它可能不是答案。

>我建议您使用SmartSnippets Toolbox Power Profiler进行快速测试并验证它。

我建议您将此票证向上用示波器手。我如何升级这个?

谢谢。

PM_DIALOG.
离线
最后一次露面:3天3小时前
职员
加入:2018-02-08 11:03
嗨安德鲁尔,

嗨安德鲁尔,

感谢您的意见。我将在内部升级这个,开始调查这个,我会回复你。

谢谢,PM_DIALOG.

安德鲁尔
离线
最后一次露面:1个月2周前
加入:2020-11-05 02:45
非常感激。感谢

非常感激。谢谢你这样做。

PM_DIALOG.
离线
最后一次露面:3天3小时前
职员
加入:2018-02-08 11:03
嗨安德鲁尔,

嗨安德鲁尔,

请检查configure_rtc_wakeup()。当广告已停止时触发此功能以便将RTC作为唤醒源配置RTC。

根据configure_rtc_wakeup(),警报中断明确设置为10秒 - Alarm_time.sec + = 10;

RTC_SET_ALARM()将作为输入参数作为anall_time和RTC_ALARM_EN_SEC(当已达到时间报警寄存器时启用以触发警报)

因此,rtc_interrupt_hdlr将在发生警报事件时生成中断(每10秒钟。)

如果更改armar_time.sec + = 2,则会看到RTC_Interrupt_hdlr每4秒发出每4秒发出一次。

谢谢,PM_DIALOG.

安德鲁尔
离线
最后一次露面:1个月2周前
加入:2020-11-05 02:45
>所以,RTC_INTRUPT_HDLR

>因此,RTC_INTRUPT_HDLR将在发生警报事件时生成中断(每10秒钟。)

是的,这是真的。但它*也*在睡觉时稍后在稍后产生另一个中断。为什么?

当我建议你找到有示波器的人时,我发出了不止一点的尖锐;但是,如果没有这样做,你就不会调试这个。

如果您有依赖于处理程序触发的内容,则此错误会导致打嗝。

谢谢。

PM_DIALOG.
离线
最后一次露面:3天3小时前
职员
加入:2018-02-08 11:03
嗨安德鲁尔,

嗨安德鲁尔,

我正在努力,所以我会回复你。

谢谢,PM_DIALOG.

PM_DIALOG.
离线
最后一次露面:3天3小时前
职员
加入:2018-02-08 11:03
嗨安德鲁尔,

嗨安德鲁尔,

抱歉耽搁了。不幸的是,我无法复制这个问题。当触发configure_rtc_wakeup()时,我正在切换p08,并且当触发rtc_interrupt_hdlr()时p09。请参阅附件截图。我用逻辑分析仪探测p08和p09。RTC_interrupt_hdlr()稍后再次启动696ms。

该设备是使用5秒钟的,并且CONFIGURE_RTC_WAKEUP()在4秒后执行。

请您可以分享示波器的屏幕​​截图,以便我能够更好地理解它?

谢谢,PM_DIALOG.

安德鲁尔
离线
最后一次露面:1个月2周前
加入:2020-11-05 02:45
当然。给我几天。

当然。给我几天。我正在进入这一点到“简单的信标”代码库,它调用了很多机械。这应该使追踪更容易。