PM组件的疑问

发表在 PM2019-1-15 14:38 [复制链接] 8 781

微信截图_20190115142545.png 7 {+ f& C+ o. ^; V9 a
PM组件会在系统唤醒之后进行tick补偿。但是我遇到一种情况,系统是由外部中断唤醒的,在中断的回调里面调用rt_timer_start开启了一个软定时器,假设定时1000个tick,因为中
0 V7 s- t# \6 M/ n断在rt_pm_exit()之前执行,还没有进行tick补偿,之后执行rt_pm_exit(),假设在中断之前# D" L" p$ y0 t% d; H
睡眠了2000个tick,那么系统补偿了2000个tick之后,定时器马上timeout了,这就有问题了。  L, B, }4 A; X$ g; o. P+ H/ H$ Q
请问这个问题要如何避免?
" N. t/ F; I. N' J+ r
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-1-15 21:04:58 | 显示全部楼层
看下文档是否能解决你的疑问,https://www.rt-thread.org/docume ... ystem/pm/an0025-pm/
使用道具 举报 回复
发表于 2019-1-16 09:56:42 | 显示全部楼层
楼主可以尝试,在系统睡醒的第一时间,调用下 rt_pm_exit() 函数,将 tick 值补偿上去
使用道具 举报 回复
发表于 2019-2-1 11:13:53 | 显示全部楼层
楼主 请问下 stm32f103 可以使用PM 组件吗?在env里面使能pm组件之后,自己是不是还有写pm的驱动程序啊? 具体怎么使用 可以指点一下吗?谢谢!官方的两篇文章都看过了,也没写具体如何移植在其他BSP上的方法。
使用道具 举报 回复
发表于 2019-2-1 11:16:58 | 显示全部楼层
我这里只是在env上面使能pm request 其他模式 也没看到有什么变化的。 微信图片编辑_20190201111450.jpg 2 X" x: L$ g1 o5 J0 J5 D0 v

& L: q/ n! H5 [8 _0 t) q# b麻烦指点一下该如何使用的。谢谢了!
7 E0 W, U0 x! }* d  @. i
使用道具 举报 回复
发表于 2019-2-1 11:57:47 | 显示全部楼层
应该是没驱动吧
使用道具 举报 回复
发表于 2019-2-14 10:30:02 | 显示全部楼层
看看文档吧,要自己写休眠的驱动的。
使用道具 举报 回复
发表于 2019-3-29 19:45:24 | 显示全部楼层
我今天仔细想了一下,你说的问题并不存在呀,进入低功耗的时候全局中断已经被关闭了,当外部中断唤醒他的时候,此时中断是不能够立刻被响应的,会回到IDLE函数里,执行补偿之后,全局中断开启,才进行相应。因此中断里启动定时器的时候,TICK已经补偿完毕了。
9 t! K6 P* Z3 j1 I, p0 L2 u( d  h% v$ ]) d; i4 _
还是说你使用的片子比较特殊一些。
使用道具 举报 回复
发表于 2019-4-3 22:18:49 | 显示全部楼层
水清沙白 发表于 2019-3-29 19:45
: \$ ?: C  p$ l我今天仔细想了一下,你说的问题并不存在呀,进入低功耗的时候全局中断已经被关闭了,当外部中断唤醒他的时 ...
& R; x( G( i% K
我用的是3.0的版本,那是还存在这个问题,事实上我截图的的那个代码已结修复了这个BUG
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表