PM

请教一下用了PM组件以后延时不准的问题

发布于 2020-07-18 14:35:12

我的程序只有一个线程,里面的工作很简单,就几句话,就是控制LED灯的翻转,用rt_thread_mdelay(1000)来1000ms翻转一次状态,如果没有开PM组件的情况下,用示波器可以看到是比较准确的1000ms翻转一次,如果开了PM组件,默认进入PM_SLEEP_MODE_DEEP状态,我用外部RTC时钟来109ms唤醒CPU一次,再用示波器观察外部RTC的时钟中断脚,可以看到每到LED线程该恢复工作的那个周期,RTC的中断周期就多加了100ms,见下图。我更改外部RTC的唤醒时钟周期为203ms以后,用示波器看也是同样的情况,每到LED线程该恢复工作的那个周期,RTC的中断周期也同样多加了100ms左右。请问这是什么原因造成的?多谢。。。
IMG_20200718_143237.jpg
IMG_20200718_143312.jpg

查看更多

关注者
0
被浏览
133
3 个回答
jerry2cool
jerry2cool 2020-07-18

我把再次使能外置RTC时钟中断的函数放在了idle线程中的rt_system_power_manager()前面,见下图。我感觉时钟周期变长好像是短时间两次进idle线程叠加了周期时间的原因,如果是这样的话,那为什么第一次没有直接进低功耗模式呢?也就是LED线程的那个rt_thread_mdelay后没有进入低功耗模式。
微信截图_20200718145128.png

bernard
bernard 2020-07-18

这个和低功耗定时器精度相关,你的低功耗定时器是什么样的。唔,你的芯片平台是什么。

如果有可能的话,最好可以有个持续走的计数器进行计数,然后来校正os tick。

JQRR_7669
JQRR_7669 认证专家 2020-07-18

rtc的清中断和设中断不应该在空闲线程中调用,rtc的中断处理中已经做处理了吧!如果需要做处理也应该是在rtc中断处理中做

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友